Author: adc Date: Mon Feb 21 10:21:09 2005 New Revision: 154702 URL: http://svn.apache.org/viewcvs?view=rev&rev=154702 Log: Broke out RoleMapper from the PolicyConfiguration heirarchy.
Added: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationImpl.java Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/interceptor/SecurityContextBeforeAfter.java geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfiguration.java geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfigurationFactory.java geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyConfigurationGeneric.java geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerHttpServletRequest.java geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerSOAPMessage.java geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfiguration.java geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationFactory.java geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoRealm.java Modified: geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/interceptor/SecurityContextBeforeAfter.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/interceptor/SecurityContextBeforeAfter.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/interceptor/SecurityContextBeforeAfter.java (original) +++ geronimo/trunk/modules/jetty/src/java/org/apache/geronimo/jetty/interceptor/SecurityContextBeforeAfter.java Mon Feb 21 10:21:09 2005 @@ -49,6 +49,7 @@ import org.apache.geronimo.security.deploy.Role; import org.apache.geronimo.security.deploy.Security; import org.apache.geronimo.security.jacc.RoleMappingConfiguration; +import org.apache.geronimo.security.jacc.RoleMappingConfigurationFactory; import org.apache.geronimo.security.util.ConfigurationUtil; import org.mortbay.http.Authenticator; import org.mortbay.http.HttpException; @@ -132,7 +133,8 @@ policyConfiguration = factory.getPolicyConfiguration(policyContextID, true); configure(uncheckedPermissions, excludedPermissions, rolePermissions); - addRoleMappings(securityRoles, securityRealmName, securityConfig, (RoleMappingConfiguration) policyConfiguration); + RoleMappingConfiguration roleMapper = RoleMappingConfigurationFactory.getRoleMappingFactory().getRoleMappingConfiguration(policyContextID, false); + addRoleMappings(securityRoles, securityRealmName, securityConfig, roleMapper); policyConfiguration.commit(); this.excludedPermissions = excludedPermissions; Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfiguration.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfiguration.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfiguration.java (original) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfiguration.java Mon Feb 21 10:21:09 2005 @@ -19,16 +19,16 @@ import java.security.Permission; import java.security.ProtectionDomain; +import javax.security.jacc.PolicyConfiguration; /** - * * @version $Rev$ $Date$ */ -public interface GeronimoPolicyConfiguration extends RoleMappingConfiguration { +public interface GeronimoPolicyConfiguration extends PolicyConfiguration, RoleMappingConfiguration { + public boolean implies(ProtectionDomain domain, Permission permission); public void open(boolean remove); - } Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfigurationFactory.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfigurationFactory.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfigurationFactory.java (original) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/GeronimoPolicyConfigurationFactory.java Mon Feb 21 10:21:09 2005 @@ -39,10 +39,13 @@ private Map configurations = new HashMap(); public GeronimoPolicyConfigurationFactory() { - if (singleton != null) { - log.warn("Singleton already assigned. There may be more than one GeronimoPolicyConfigurationFactory being used."); + synchronized (GeronimoPolicyConfigurationFactory.class) { + if (singleton != null) { + log.error("Singleton already assigned. There may be more than one GeronimoPolicyConfigurationFactory being used."); + throw new IllegalStateException("Singleton already assigned"); + } + singleton = this; } - singleton = this; } public void setPolicyConfiguration(String contextID, GeronimoPolicyConfiguration configuration) { @@ -50,7 +53,7 @@ if (sm != null) sm.checkPermission(new GeronimoSecurityPermission("setPolicyConfiguration")); configurations.put(contextID, configuration); - + log.trace("Set policy configuration " + contextID); } Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyConfigurationGeneric.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyConfigurationGeneric.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyConfigurationGeneric.java (original) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyConfigurationGeneric.java Mon Feb 21 10:21:09 2005 @@ -171,18 +171,18 @@ public void linkConfiguration(javax.security.jacc.PolicyConfiguration link) throws PolicyContextException { if (state != OPEN) throw new UnsupportedOperationException("Not in an open state"); - RoleMappingConfiguration configuration = (RoleMappingConfiguration) link; + RoleMappingConfiguration roleMapper = RoleMappingConfigurationFactory.getRoleMappingFactory().getRoleMappingConfiguration(link.getContextID(), false); Iterator principals = principalRoleMapping.keySet().iterator(); while (principals.hasNext()) { Principal principal = (Principal) principals.next(); Iterator roles = ((HashSet) principalRoleMapping.get(principal)).iterator(); while (roles.hasNext()) { - configuration.addRoleMapping((String) roles.next(), Collections.singletonList(principal)); + roleMapper.addRoleMapping((String) roles.next(), Collections.singletonList(principal)); } } - configuration.linkConfiguration(this); + link.linkConfiguration(this); } public void delete() throws PolicyContextException { Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerHttpServletRequest.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerHttpServletRequest.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerHttpServletRequest.java (original) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerHttpServletRequest.java Mon Feb 21 10:21:09 2005 @@ -22,7 +22,6 @@ /** - * * @version $Rev$ $Date$ */ public class PolicyContextHandlerHttpServletRequest implements PolicyContextHandler { Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerSOAPMessage.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerSOAPMessage.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerSOAPMessage.java (original) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/PolicyContextHandlerSOAPMessage.java Mon Feb 21 10:21:09 2005 @@ -22,7 +22,6 @@ /** - * * @version $Rev$ $Date$ */ public class PolicyContextHandlerSOAPMessage implements PolicyContextHandler { Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfiguration.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfiguration.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfiguration.java (original) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfiguration.java Mon Feb 21 10:21:09 2005 @@ -18,8 +18,6 @@ package org.apache.geronimo.security.jacc; import java.util.Collection; - -import javax.security.jacc.PolicyConfiguration; import javax.security.jacc.PolicyContextException; @@ -27,23 +25,25 @@ * <p>The methods of this interface are used by containers to create role mappings in a <code>Policy</code> provider. * An object that implements the <code>RoleMappingConfiguration</code> interface provides the role mapping configuration * interface for a corresponding policy context within the corresponding Policy provider.</p> - * + * <p/> * <p>Geronimo will obtain an instance of this class by calling - * <code>PolicyConfigurationFactory.getPolicyConfiguration</code>. If the object that is returned <i>also</i> + * <code>RoleMappingConfigurationFactory.getRoleMappingConfiguration</code>. If the object that is returned <i>also</i> * implements <code>RoleMappingConfiguration</code>, Geronimo will call the methods of that interface to provide role * mappings to the <code>Policy</code> provider</p> + * * @version $Rev$ $Date$ - * @see javax.security.jacc.PolicyConfiguration - * @see javax.security.jacc.PolicyConfigurationFactory#getPolicyConfiguration + * @see RoleMappingConfigurationFactory#getRoleMappingConfiguration */ -public interface RoleMappingConfiguration extends PolicyConfiguration { +public interface RoleMappingConfiguration { /** * Add a mapping from a module's security roles to physical principals. Mapping principals to the same role twice * will cause a <code>PolicyContextException</code> to be thrown. - * @param role The role that is to be mapped to a set of principals. + * + * @param role The role that is to be mapped to a set of principals. * @param principals The set of principals that are to be mapped to to role. - * @throws javax.security.jacc.PolicyContextException if the mapping principals to the same role twice occurs. + * @throws javax.security.jacc.PolicyContextException + * if the mapping principals to the same role twice occurs. */ public void addRoleMapping(String role, Collection principals) throws PolicyContextException; } Modified: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationFactory.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationFactory.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationFactory.java (original) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationFactory.java Mon Feb 21 10:21:09 2005 @@ -17,13 +17,13 @@ package org.apache.geronimo.security.jacc; -import org.apache.geronimo.security.GeronimoSecurityPermission; - -import javax.security.jacc.PolicyConfiguration; -import javax.security.jacc.PolicyContextException; import java.security.SecurityPermission; import java.util.HashMap; import java.util.Map; +import javax.security.jacc.PolicyContextException; + +import org.apache.geronimo.security.GeronimoSecurityPermission; + public class RoleMappingConfigurationFactory { @@ -58,12 +58,10 @@ if (configuration == null) { GeronimoPolicyConfigurationFactory gpcf = GeronimoPolicyConfigurationFactory.getSingleton(); - PolicyConfiguration policyConfiguration = gpcf.getGeronimoPolicyConfiguration(contextID); + GeronimoPolicyConfiguration policyConfiguration = gpcf.getGeronimoPolicyConfiguration(contextID); - configuration = new RoleMappingConfiguration(policyConfiguration); + configuration = new RoleMappingConfigurationImpl(policyConfiguration); configurations.put(contextID, configuration); - } else { - configuration.open(remove); } return configuration; Added: geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationImpl.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationImpl.java?view=auto&rev=154702 ============================================================================== --- geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationImpl.java (added) +++ geronimo/trunk/modules/security/src/java/org/apache/geronimo/security/jacc/RoleMappingConfigurationImpl.java Mon Feb 21 10:21:09 2005 @@ -0,0 +1,37 @@ +/** + * + * Copyright 2005 The Apache Software Foundation + * + * 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.apache.geronimo.security.jacc; + +import java.util.Collection; +import javax.security.jacc.PolicyContextException; + + +/** + * @version $Revision: $ $Date: $ + */ +public class RoleMappingConfigurationImpl implements RoleMappingConfiguration { + + private final GeronimoPolicyConfiguration policyConfiguration; + + RoleMappingConfigurationImpl(GeronimoPolicyConfiguration policyConfiguration) { + this.policyConfiguration = policyConfiguration; + } + + public void addRoleMapping(String role, Collection principals) throws PolicyContextException { + policyConfiguration.addRoleMapping(role, principals); + } +} Modified: geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoRealm.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoRealm.java?view=diff&r1=154701&r2=154702 ============================================================================== --- geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoRealm.java (original) +++ geronimo/trunk/modules/tomcat/src/java/org/apache/geronimo/tomcat/TomcatGeronimoRealm.java Mon Feb 21 10:21:09 2005 @@ -66,6 +66,7 @@ import org.apache.geronimo.security.deploy.Security; import org.apache.geronimo.security.jacc.PolicyContextHandlerContainerSubject; import org.apache.geronimo.security.jacc.RoleMappingConfiguration; +import org.apache.geronimo.security.jacc.RoleMappingConfigurationFactory; import org.apache.geronimo.security.util.ConfigurationUtil; @@ -116,7 +117,8 @@ policyConfiguration = factory.getPolicyConfiguration(policyContextID, true); configure(uncheckedPermissions, excludedPermissions, rolePermissions); - addRoleMappings(securityRoles, loginDomainName, securityConfig, (RoleMappingConfiguration) policyConfiguration); + RoleMappingConfiguration roleMapper = RoleMappingConfigurationFactory.getRoleMappingFactory().getRoleMappingConfiguration(policyContextID, false); + addRoleMappings(securityRoles, loginDomainName, securityConfig, roleMapper); policyConfiguration.commit(); this.loginDomainName = loginDomainName;