[jbossws-commits] JBossWS SVN: r16925 - in container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices: deployers and 3 other directories.
jbossws-commits at lists.jboss.org
jbossws-commits at lists.jboss.org
Fri Oct 19 05:34:22 EDT 2012
Author: alessio.soldano at jboss.com
Date: 2012-10-19 05:34:22 -0400 (Fri, 19 Oct 2012)
New Revision: 16925
Modified:
container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/WSLogger.java
container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/deployers/WSIntegrationProcessorJAXWS_EJB.java
container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/metadata/model/EJBEndpoint.java
container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/tomcat/AbstractSecurityMetaDataAccessorEJB.java
container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/tomcat/WebMetaDataCreator.java
container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/util/DotNames.java
Log:
[AS7-5784] Porting fix to AS712 ASIL
Modified: container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/WSLogger.java
===================================================================
--- container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/WSLogger.java 2012-10-19 08:28:13 UTC (rev 16924)
+++ container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/WSLogger.java 2012-10-19 09:34:22 UTC (rev 16925)
@@ -257,4 +257,9 @@
@LogMessage(level = INFO)
@Message(id = 15593, value = "MBeanServer not available, skipping registration/unregistration of %s")
void mBeanServerNotAvailable(Object bean);
-}
+
+ @LogMessage(level = WARN)
+ @Message(id = 15596, value = "Multiple EJB3 endpoints in the same deployment with different declared security roles; be aware this might be a security risk if you're not controlling allowed roles (@RolesAllowed) on each ws endpoint method.")
+ void multipleEndpointsWithDifferentDeclaredSecurityRoles();
+
+}
\ No newline at end of file
Modified: container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/deployers/WSIntegrationProcessorJAXWS_EJB.java
===================================================================
--- container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/deployers/WSIntegrationProcessorJAXWS_EJB.java 2012-10-19 08:28:13 UTC (rev 16924)
+++ container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/deployers/WSIntegrationProcessorJAXWS_EJB.java 2012-10-19 09:34:22 UTC (rev 16925)
@@ -26,6 +26,7 @@
import static org.jboss.as.webservices.util.ASHelper.getJaxwsDeployment;
import static org.jboss.as.webservices.util.ASHelper.getRequiredAttachment;
import static org.jboss.as.webservices.util.DotNames.DECLARE_ROLES_ANNOTATION;
+import static org.jboss.as.webservices.util.DotNames.PERMIT_ALL_ANNOTATION;
import static org.jboss.as.webservices.util.DotNames.ROLES_ALLOWED_ANNOTATION;
import static org.jboss.as.webservices.util.DotNames.WEB_CONTEXT_ANNOTATION;
import static org.jboss.as.webservices.util.DotNames.WEB_SERVICE_ANNOTATION;
@@ -86,7 +87,7 @@
final String webServiceClassName = webServiceClassInfo.name().toString();
final List<ComponentDescription> componentDescriptions = moduleDescription.getComponentsByClassName(webServiceClassName);
final List<SessionBeanComponentDescription> sessionBeans = getSessionBeans(componentDescriptions);
- final Set<String> securityRoles = getSecurityRoles(unit, webServiceClassInfo); // TODO: assembly processed for each endpoint!
+ final Set<String> securityRoles = getDeclaredSecurityRoles(unit, webServiceClassInfo); // TODO: assembly processed for each endpoint!
final WebContextAnnotationWrapper webCtx = getWebContextWrapper(webServiceClassInfo);
final String authMethod = webCtx.getAuthMethod();
final boolean isSecureWsdlAccess = webCtx.isSecureWsdlAccess();
@@ -119,7 +120,7 @@
return sessionBeans;
}
- private static Set<String> getSecurityRoles(final DeploymentUnit unit, final ClassInfo webServiceClassInfo) {
+ private static Set<String> getDeclaredSecurityRoles(final DeploymentUnit unit, final ClassInfo webServiceClassInfo) {
final Set<String> securityRoles = new HashSet<String>();
// process assembly-descriptor DD section
@@ -143,9 +144,11 @@
if (webServiceClassInfo.annotations().containsKey(ROLES_ALLOWED_ANNOTATION)) {
final List<AnnotationInstance> allowedRoles = webServiceClassInfo.annotations().get(ROLES_ALLOWED_ANNOTATION);
for (final AnnotationInstance allowedRole : allowedRoles) {
- for (final String roleName : allowedRole.value().asStringArray()) {
- securityRoles.add(roleName);
- }
+ if (allowedRole.target().equals(webServiceClassInfo)) {
+ for (final String roleName : allowedRole.value().asStringArray()) {
+ securityRoles.add(roleName);
+ }
+ }
}
}
@@ -153,12 +156,22 @@
if (webServiceClassInfo.annotations().containsKey(DECLARE_ROLES_ANNOTATION)) {
final List<AnnotationInstance> declareRoles = webServiceClassInfo.annotations().get(DECLARE_ROLES_ANNOTATION);
for (final AnnotationInstance declareRole : declareRoles) {
- for (final String roleName : declareRole.value().asStringArray()) {
- securityRoles.add(roleName);
- }
+ if (declareRole.target().equals(webServiceClassInfo)) {
+ for (final String roleName : declareRole.value().asStringArray()) {
+ securityRoles.add(roleName);
+ }
+ }
}
}
+ // process @PermitAll annotation
+ if (webServiceClassInfo.annotations().containsKey(PERMIT_ALL_ANNOTATION)) {
+ final AnnotationInstance permitAll = webServiceClassInfo.annotations().get(PERMIT_ALL_ANNOTATION).iterator().next();
+ if (permitAll.target().equals(webServiceClassInfo)) {
+ securityRoles.add("*");
+ }
+ }
+
return (securityRoles.size() > 0) ? Collections.unmodifiableSet(securityRoles) : Collections.<String>emptySet();
}
Modified: container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/metadata/model/EJBEndpoint.java
===================================================================
--- container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/metadata/model/EJBEndpoint.java 2012-10-19 08:28:13 UTC (rev 16924)
+++ container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/metadata/model/EJBEndpoint.java 2012-10-19 09:34:22 UTC (rev 16925)
@@ -35,16 +35,16 @@
public static final String EJB_COMPONENT_VIEW_NAME = EJBEndpoint.class.getPackage().getName() + "EjbComponentViewName";
private final SessionBeanComponentDescription ejbMD;
private final ServiceName viewName;
- private final Set<String> securityRoles;
+ private final Set<String> declaredSecurityRoles;
private final String authMethod;
private final boolean secureWsdlAccess;
private final String transportGuarantee;
- public EJBEndpoint(final SessionBeanComponentDescription ejbMD, final ServiceName viewName, final Set<String> securityRoles, final String authMethod, final boolean secureWsdlAccess, final String transportGuarantee) {
+ public EJBEndpoint(final SessionBeanComponentDescription ejbMD, final ServiceName viewName, final Set<String> declaredSecurityRoles, final String authMethod, final boolean secureWsdlAccess, final String transportGuarantee) {
super(ejbMD.getComponentName(), ejbMD.getComponentClassName());
this.ejbMD = ejbMD;
this.viewName = viewName;
- this.securityRoles = securityRoles;
+ this.declaredSecurityRoles = declaredSecurityRoles;
this.authMethod = authMethod;
this.secureWsdlAccess = secureWsdlAccess;
this.transportGuarantee = transportGuarantee;
@@ -66,8 +66,8 @@
return ejbMD.getSecurityDomain();
}
- public Set<String> getSecurityRoles() {
- return securityRoles;
+ public Set<String> getDeclaredSecurityRoles() {
+ return declaredSecurityRoles;
}
public String getAuthMethod() {
Modified: container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/tomcat/AbstractSecurityMetaDataAccessorEJB.java
===================================================================
--- container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/tomcat/AbstractSecurityMetaDataAccessorEJB.java 2012-10-19 08:28:13 UTC (rev 16924)
+++ container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/tomcat/AbstractSecurityMetaDataAccessorEJB.java 2012-10-19 09:34:22 UTC (rev 16925)
@@ -24,9 +24,11 @@
import static org.jboss.as.webservices.WSMessages.MESSAGES;
import java.util.List;
+import java.util.Set;
import org.jboss.as.ee.structure.Attachments;
import org.jboss.as.server.deployment.DeploymentUnit;
+import org.jboss.as.webservices.WSLogger;
import org.jboss.as.webservices.metadata.model.EJBEndpoint;
import org.jboss.metadata.ear.jboss.JBossAppMetaData;
import org.jboss.metadata.ear.spec.EarMetaData;
@@ -75,8 +77,16 @@
public SecurityRolesMetaData getSecurityRoles(final Deployment dep) {
final SecurityRolesMetaData securityRolesMD = new SecurityRolesMetaData();
+ Set<String> firstEndpointDeclaredSecurityRoles = null;
for (final EJBEndpoint ejbEndpoint : getEjbEndpoints(dep)) {
- for (final String roleName : ejbEndpoint.getSecurityRoles()) {
+ final Set<String> declaredSecurityRoles = ejbEndpoint.getDeclaredSecurityRoles();
+ if (firstEndpointDeclaredSecurityRoles == null) {
+ firstEndpointDeclaredSecurityRoles = declaredSecurityRoles;
+ } else if (!firstEndpointDeclaredSecurityRoles.equals(declaredSecurityRoles)) {
+ WSLogger.ROOT_LOGGER.multipleEndpointsWithDifferentDeclaredSecurityRoles();
+ }
+ // union of declared security roles from all endpoints...
+ for (final String roleName : declaredSecurityRoles) {
final SecurityRoleMetaData securityRoleMD = new SecurityRoleMetaData();
securityRoleMD.setRoleName(roleName);
securityRolesMD.add(securityRoleMD);
Modified: container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/tomcat/WebMetaDataCreator.java
===================================================================
--- container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/tomcat/WebMetaDataCreator.java 2012-10-19 08:28:13 UTC (rev 16924)
+++ container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/tomcat/WebMetaDataCreator.java 2012-10-19 09:34:22 UTC (rev 16925)
@@ -302,7 +302,7 @@
if (hasAuthMethod) {
final SecurityMetaDataAccessorEJB ejbMDAccessor = getEjbSecurityMetaDataAccessor(dep);
final SecurityRolesMetaData securityRolesMD = ejbMDAccessor.getSecurityRoles(dep);
- final boolean hasSecurityRolesMD = securityRolesMD != null;
+ final boolean hasSecurityRolesMD = securityRolesMD != null && !securityRolesMD.isEmpty();
if (hasSecurityRolesMD) {
ROOT_LOGGER.creatingSecurityRoles();
Modified: container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/util/DotNames.java
===================================================================
--- container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/util/DotNames.java 2012-10-19 08:28:13 UTC (rev 16924)
+++ container/jboss71/branches/jbossws-jboss712/server-integration/src/main/java/org/jboss/as/webservices/util/DotNames.java 2012-10-19 09:34:22 UTC (rev 16925)
@@ -23,6 +23,7 @@
package org.jboss.as.webservices.util;
import javax.annotation.security.DeclareRoles;
+import javax.annotation.security.PermitAll;
import javax.annotation.security.RolesAllowed;
import javax.ejb.Singleton;
import javax.ejb.Stateless;
@@ -52,6 +53,7 @@
public static final DotName JAXWS_SERVICE_CLASS = DotName.createSimple(Service.class.getName());
public static final DotName OBJECT_CLASS = DotName.createSimple(Object.class.getName());
public static final DotName ROLES_ALLOWED_ANNOTATION = DotName.createSimple(RolesAllowed.class.getName());
+ public static final DotName PERMIT_ALL_ANNOTATION = DotName.createSimple(PermitAll.class.getName());
public static final DotName DECLARE_ROLES_ANNOTATION = DotName.createSimple(DeclareRoles.class.getName());
public static final DotName SERVLET_CLASS = DotName.createSimple(Servlet.class.getName());
public static final DotName SINGLETON_ANNOTATION = DotName.createSimple(Singleton.class.getName());
More information about the jbossws-commits
mailing list