Author: objectiser
Date: 2011-04-15 10:43:52 -0400 (Fri, 15 Apr 2011)
New Revision: 1358
Added:
dsp/trunk/integration/jbossas6/src/main/java/org/jboss/soa/dsp/deployer/jbossas6/WebMetaDataFactory.java
Log:
Added:
dsp/trunk/integration/jbossas6/src/main/java/org/jboss/soa/dsp/deployer/jbossas6/WebMetaDataFactory.java
===================================================================
---
dsp/trunk/integration/jbossas6/src/main/java/org/jboss/soa/dsp/deployer/jbossas6/WebMetaDataFactory.java
(rev 0)
+++
dsp/trunk/integration/jbossas6/src/main/java/org/jboss/soa/dsp/deployer/jbossas6/WebMetaDataFactory.java 2011-04-15
14:43:52 UTC (rev 1358)
@@ -0,0 +1,214 @@
+/*
+ * Copyright 2010 Red Hat, Inc
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *
http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.jboss.soa.dsp.deployer.jbossas6;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.jboss.metadata.web.jboss.JBossServletMetaData;
+import org.jboss.metadata.web.jboss.JBossServletsMetaData;
+import org.jboss.metadata.web.jboss.JBossWebMetaData;
+import org.jboss.metadata.web.spec.AuthConstraintMetaData;
+import org.jboss.metadata.web.spec.LoginConfigMetaData;
+import org.jboss.metadata.web.spec.SecurityConstraintMetaData;
+import org.jboss.metadata.web.spec.ServletMappingMetaData;
+import org.jboss.metadata.web.spec.TransportGuaranteeType;
+import org.jboss.metadata.web.spec.UserDataConstraintMetaData;
+import org.jboss.metadata.web.spec.WebResourceCollectionMetaData;
+import org.jboss.metadata.web.spec.WebResourceCollectionsMetaData;
+import org.jboss.soa.dsp.annotation.SecurityDomain;
+import org.jboss.soa.dsp.annotation.WebMetaData;
+
+/**
+ * Creates an in-memory representation of web meta data.
+ * Based on
http://anonsvn.jboss.org/repos/jbossas/tags/JBoss_5_1_0_GA/webservices/sr...
+ *
+ * @author Heiko.Braun <heiko.braun(a)jboss.com>
+ */
+public class WebMetaDataFactory
+{
+ private String endpointId;
+ private String servletClassName = null;
+ private String webContext = null;
+ private String urlPattern = null;
+
+ public WebMetaDataFactory(String endpointId, String webContext, String urlPattern,
String servletClassName)
+ {
+ this.endpointId = endpointId;
+ this.servletClassName = servletClassName;
+ this.webContext = webContext;
+ this.urlPattern = urlPattern;
+ }
+
+ public JBossWebMetaData createWebMetaData(ClassLoader loader)
+ {
+ JBossWebMetaData jbwmd = new JBossWebMetaData();
+ try {
+ Class<?> providerFactory = Class.forName(servletClassName);
+ createWebAppDescriptor(jbwmd, providerFactory);
+ createJBossWebAppDescriptor(jbwmd, providerFactory);
+ } catch (ClassNotFoundException ex) {
+
+ }
+
+ return jbwmd;
+ }
+
+ private void createWebAppDescriptor(JBossWebMetaData jbwmd, Class<?>
providerFactory)
+ {
+ /*
+ <servlet>
+ <servlet-name>
+ <servlet-class>
+ </servlet>
+ */
+ JBossServletsMetaData servlets = jbwmd.getServlets();
+ JBossServletMetaData servlet = new JBossServletMetaData();
+ servlet.setServletName("Endpoint-"+endpointId);
+ servlet.setServletClass(servletClassName);
+ servlets.add(servlet);
+
+
+ /*
+ <servlet-mapping>
+ <servlet-name>
+ <url-pattern>
+ </servlet-mapping>
+ */
+ List<ServletMappingMetaData> servletMappings = jbwmd.getServletMappings();
+ if (servletMappings == null) {
+ servletMappings = new ArrayList<ServletMappingMetaData>();
+ jbwmd.setServletMappings(servletMappings);
+ }
+ ServletMappingMetaData servletMapping = new ServletMappingMetaData();
+ servletMapping.setServletName("Endpoint-"+endpointId);
+ ArrayList<String> urlPatterns = new ArrayList<String>();
+ urlPatterns.add(urlPattern);
+ servletMapping.setUrlPatterns(urlPatterns);
+ servletMappings.add(servletMapping);
+
+ WebMetaData metaData = providerFactory.getAnnotation(WebMetaData.class);
+ if (metaData != null)
+ configureSecurity(jbwmd, metaData);
+ }
+
+ /**
+ * @param jbwmd
+ */
+ protected void configureSecurity(JBossWebMetaData jbwmd, WebMetaData metaData) {
+ Boolean secureWSDLAccess = null;
+ String transportGuarantee = null;
+ String beanAuthMethod = null;
+
+ if (metaData != null) {
+ if (metaData.authMethod().length() > 0)
+ beanAuthMethod = metaData.authMethod();
+ if (metaData.transportGuarantee().length() > 0)
+ transportGuarantee = metaData.transportGuarantee();
+ if (metaData.secureWSDLAccess())
+ secureWSDLAccess = metaData.secureWSDLAccess();
+ }
+
+ String authMethod = null;
+ if (beanAuthMethod != null || transportGuarantee != null) {
+ List<SecurityConstraintMetaData> securityContraints =
jbwmd.getSecurityContraints();
+ if (securityContraints == null) {
+ securityContraints = new ArrayList<SecurityConstraintMetaData>();
+ jbwmd.setSecurityContraints(securityContraints);
+ }
+
+ SecurityConstraintMetaData securityConstraint = new
SecurityConstraintMetaData();
+ securityContraints.add(securityConstraint);
+
+ WebResourceCollectionsMetaData resourceCollections =
securityConstraint.getResourceCollections();
+ if (resourceCollections == null) {
+ resourceCollections = new WebResourceCollectionsMetaData();
+ securityConstraint.setResourceCollections(resourceCollections);
+ }
+
+ WebResourceCollectionMetaData resourceCollection = new
WebResourceCollectionMetaData();
+ resourceCollections.add(resourceCollection);
+
+ resourceCollection.setWebResourceName(endpointId);
+ resourceCollection.setUrlPatterns(Arrays.asList(new String[] { urlPattern
}));
+ ArrayList<String> httpMethods = new ArrayList<String>();
+ resourceCollection.setHttpMethods(httpMethods);
+ if (Boolean.TRUE.equals(secureWSDLAccess)) {
+ httpMethods.add("GET");
+ }
+ httpMethods.add("POST");
+
+ if (beanAuthMethod != null) {
+ // Only the first auth-method gives the war login-config/auth-method
+ if (authMethod == null)
+ authMethod = beanAuthMethod;
+
+ AuthConstraintMetaData authConstraint = new AuthConstraintMetaData();
+ authConstraint.setRoleNames(Arrays.asList(new String[] { "*"
}));
+ securityConstraint.setAuthConstraint(authConstraint);
+ }
+
+ if (transportGuarantee != null) {
+ UserDataConstraintMetaData userDataConstraint = new
UserDataConstraintMetaData();
+
userDataConstraint.setTransportGuarantee(TransportGuaranteeType.valueOf(transportGuarantee));
+ securityConstraint.setUserDataConstraint(userDataConstraint);
+ }
+
+ if (authMethod != null) {
+ LoginConfigMetaData loginConfig = jbwmd.getLoginConfig();
+ if (loginConfig == null) {
+ loginConfig = new LoginConfigMetaData();
+ jbwmd.setLoginConfig(loginConfig);
+ }
+ loginConfig.setAuthMethod(authMethod);
+ loginConfig.setRealmName("DSP Security Realm");
+ }
+ }
+ }
+
+ /**
+ * @param jbwmd
+ * @param providerFactory
+ */
+ private void createJBossWebAppDescriptor(JBossWebMetaData jbwmd, Class<?>
providerFactory)
+ {
+ /* Create a jboss-web
+ <jboss-web>
+ <security-domain>java:/jaas/cts</security-domain>
+ <context-root>/ws/ejbN/</context-root>
+ <virtual-host>some.domain.com</virtual-host>
+ </jboss-web>
+ */
+ SecurityDomain domain = providerFactory.getAnnotation(SecurityDomain.class);
+ if (domain != null)
+ addSecurityDomain(jbwmd, domain.value());
+ jbwmd.setContextRoot(webContext);
+ }
+
+ public void addSecurityDomain(JBossWebMetaData jbossWeb, String securityDomain)
+ {
+
+ if (securityDomain != null)
+ {
+ if (securityDomain.startsWith("java:/jaas/") == false)
+ securityDomain = "java:/jaas/" + securityDomain;
+
+ jbossWeb.setSecurityDomain(securityDomain);
+ }
+ }
+}