maguro      2004/11/12 16:29:21

  Modified:    modules/openejb-builder/src/java/org/openejb/deployment
                        CMPEntityBuilder.java ContainerSecurityBuilder.java
                        EntityBuilder.java MdbBuilder.java
                        OpenEJBModuleBuilder.java SessionBuilder.java
  Log:

  Intermediate checkin
  http://nagoya.apache.org/jira/browse/GERONIMO-454
  
  Revision  Changes    Path
  1.6       +2 -1      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPEntityBuilder.java
  
  Index: CMPEntityBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/CMPEntityBuilder.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- CMPEntityBuilder.java     11 Nov 2004 17:08:50 -0000      1.5
  +++ CMPEntityBuilder.java     12 Nov 2004 21:29:21 -0000      1.6
  @@ -558,7 +558,8 @@
                   ((EjbJarType) ejbModule.getSpecDD()).getAssemblyDescriptor(),
                   getString(entityBean.getEjbName()),
                   entityBean.getSecurityIdentity(),
  -                entityBean.getSecurityRoleRefArray());
  +                entityBean.getSecurityRoleRefArray(),
  +                getModuleBuilder().getSecurityService());
   
           processEnvironmentRefs(builder, earContext, ejbModule, entityBean, 
openejbEntityBean, null, cl);
   
  
  
  
  1.2       +13 -131   
openejb/modules/openejb-builder/src/java/org/openejb/deployment/ContainerSecurityBuilder.java
  
  Index: ContainerSecurityBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/ContainerSecurityBuilder.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ContainerSecurityBuilder.java     11 Nov 2004 17:08:50 -0000      1.1
  +++ ContainerSecurityBuilder.java     12 Nov 2004 21:29:21 -0000      1.2
  @@ -47,8 +47,6 @@
    */
   package org.openejb.deployment;
   
  -import javax.management.MalformedObjectNameException;
  -import javax.management.ObjectName;
   import javax.security.auth.Subject;
   import javax.security.jacc.EJBMethodPermission;
   import javax.security.jacc.EJBRoleRefPermission;
  @@ -65,13 +63,12 @@
   import org.apache.geronimo.security.GeronimoSecurityException;
   import org.apache.geronimo.security.PrimaryRealmPrincipal;
   import org.apache.geronimo.security.RealmPrincipal;
  -import org.apache.geronimo.security.deploy.AutoMapAssistant;
  +import org.apache.geronimo.security.SecurityService;
   import org.apache.geronimo.security.deploy.DefaultPrincipal;
   import org.apache.geronimo.security.deploy.Principal;
   import org.apache.geronimo.security.deploy.Realm;
   import org.apache.geronimo.security.deploy.Role;
   import org.apache.geronimo.security.deploy.Security;
  -import org.apache.geronimo.security.realm.SecurityRealm;
   import org.apache.geronimo.security.util.ConfigurationUtil;
   import org.apache.geronimo.xbeans.j2ee.AssemblyDescriptorType;
   import org.apache.geronimo.xbeans.j2ee.ExcludeListType;
  @@ -119,7 +116,8 @@
                                                   AssemblyDescriptorType 
assemblyDescriptor,
                                                   String EJBName,
                                                   SecurityIdentityType 
securityIdentity,
  -                                                SecurityRoleRefType[] 
roleReferences)
  +                                                SecurityRoleRefType[] 
roleReferences,
  +                                                SecurityService 
securityService)
               throws DeploymentException {
   
           if (security == null) return;
  @@ -229,41 +227,7 @@
           /**
            * Set the security interceptor's run-as subject, if one has been 
defined.
            */
  -        boolean found = (securityIdentity == null || 
securityIdentity.getRunAs() == null);
  -        String runAsName = (!found ? 
securityIdentity.getRunAs().getRoleName().getStringValue() : "");
  -        Iterator rollMappings = security.getRoleMappings().iterator();
  -        while (rollMappings.hasNext()) {
  -            Role role = (Role) rollMappings.next();
  -
  -            String roleName = role.getRoleName();
  -            Subject roleDesignate = new Subject();
  -            Set principalSet = new HashSet();
  -
  -            Iterator realms = role.getRealms().iterator();
  -            while (realms.hasNext()) {
  -                Realm realm = (Realm) realms.next();
  -
  -                Iterator principals = realm.getPrincipals().iterator();
  -                while (principals.hasNext()) {
  -                    Principal principal = (Principal) principals.next();
  -
  -                    RealmPrincipal realmPrincipal = 
ConfigurationUtil.generateRealmPrincipal(principal, realm.getRealmName());
  -
  -                    if (realmPrincipal == null) throw new 
DeploymentException("Unable to create realm principal");
  -
  -                    principalSet.add(realmPrincipal);
  -                    if (principal.isDesignatedRunAs()) 
roleDesignate.getPrincipals().add(realmPrincipal);
  -                }
  -            }
  -            securityConfiguration.getRoleMapping().put(roleName, 
principalSet);
  -
  -            if (!found && roleDesignate.getPrincipals().size() > 0 && 
runAsName.equals(roleName)) {
  -                builder.setRunAs(roleDesignate);
  -                found = true;
  -            }
  -        }
  -        if (!found) throw new DeploymentException("Role designate not found 
for role: " + runAsName);
  -
  +        addRoleMappings(securityConfiguration, builder, security, 
securityIdentity, securityService);
   
           /**
            * EJB v2.1 section 21.3.2
  @@ -300,31 +264,7 @@
        * @return the default principal
        */
       protected Subject generateDefaultSubject(Security security) throws 
GeronimoSecurityException {
  -
           DefaultPrincipal defaultPrincipal = security.getDefaultPrincipal();
  -        if (defaultPrincipal == null) {
  -            AutoMapAssistant config = security.getAssistant();
  -            try {
  -                if (config != null) {
  -                    Set assistants = 
moduleBuilder.getKernel().listGBeans(new 
ObjectName("geronimo.security:type=SecurityRealm,realm=" + 
config.getSecurityRealm()));
  -                    if (assistants.size() < 1 || assistants.size() > 1) 
throw new GeronimoSecurityException("Only one auto mapping assistant should 
match " + config.getSecurityRealm());
  -
  -                    org.apache.geronimo.security.realm.AutoMapAssistant 
assistant = (org.apache.geronimo.security.realm.AutoMapAssistant) 
assistants.iterator().next();
  -                    org.apache.geronimo.security.deploy.Principal principal 
= assistant.obtainDefaultPrincipal();
  -                    defaultPrincipal = new DefaultPrincipal();
  -                    defaultPrincipal.setPrincipal(principal);
  -                    defaultPrincipal.setRealmName(((SecurityRealm) 
assistant).getRealmName());
  -                }
  -            } catch (MalformedObjectNameException e) {
  -                throw new GeronimoSecurityException("Bad object name 
geronimo.security:type=SecurityRealm,realm=" + config.getSecurityRealm());
  -            }
  -        }
  -        if (defaultPrincipal == null) throw new 
GeronimoSecurityException("Unable to generate default principal");
  -
  -        return generateDefaultSubject(security, defaultPrincipal);
  -    }
  -
  -    protected Subject generateDefaultSubject(Security security, 
DefaultPrincipal defaultPrincipal) throws GeronimoSecurityException {
           Subject defaultSubject = new Subject();
   
           RealmPrincipal realmPrincipal = 
ConfigurationUtil.generateRealmPrincipal(defaultPrincipal.getPrincipal(), 
defaultPrincipal.getRealmName());
  @@ -382,83 +322,24 @@
       protected void addRoleMappings(SecurityConfiguration 
securityConfiguration,
                                      SecureBuilder builder,
                                      Security security,
  -                                   SecurityIdentityType securityIdentity)
  -            throws DeploymentException {
  -
  -        String runAsName = ((securityIdentity != null && 
securityIdentity.getRunAs() != null) ? 
securityIdentity.getRunAs().getRoleName().getStringValue() : "");
  -
  -        autoMapRoles(securityConfiguration, builder, security, 
securityIdentity, runAsName);
  -        addExplicitMappings(securityConfiguration, builder, security, 
securityIdentity, runAsName);
  -
  -        if (builder.getRunAs() == null) throw new DeploymentException("Role 
designate not found for role: " + runAsName);
  -    }
  -
  -    protected void autoMapRoles(SecurityConfiguration securityConfiguration,
  -                                SecureBuilder builder,
  -                                Security security,
  -                                SecurityIdentityType securityIdentity,
  -                                String runAsName)
  +                                   SecurityIdentityType securityIdentity,
  +                                   SecurityService securityService)
               throws DeploymentException {
   
  -        Iterator rollMappings = security.getRoleMappings().iterator();
  -        AutoMapAssistant config = security.getAssistant();
  -        try {
  -            if (config != null) {
  -                ObjectName assistantName = new 
ObjectName("geronimo.security:type=SecurityRealm,realm=" + 
config.getSecurityRealm());
  -                Set assistants = 
moduleBuilder.getKernel().listGBeans(assistantName);
  -                if (assistants.size() < 1 || assistants.size() > 1) throw 
new GeronimoSecurityException("Only one auto mapping assistant should match " + 
assistantName);
  -
  -                org.apache.geronimo.security.realm.AutoMapAssistant 
assistant = (org.apache.geronimo.security.realm.AutoMapAssistant) 
assistants.iterator().next();
   
  -                while (rollMappings.hasNext()) {
  -                    Role role = (Role) rollMappings.next();
  +        security.autoGenerate(securityService);
  +        addExplicitMappings(securityConfiguration, builder, security, 
securityIdentity);
   
  -                    String roleName = role.getRoleName();
  -                    Subject roleDesignate = new Subject();
  -                    Set principalSet = new HashSet();
  -
  -                    Iterator classNames = 
assistant.obtainRolePrincipalClasses().iterator();
  -                    while (classNames.hasNext()) {
  -                        Principal principal = new Principal();
  -                        principal.setClassName((String) classNames.next());
  -                        principal.setPrincipalName(roleName);
  -
  -                        RealmPrincipal realmPrincipal = 
ConfigurationUtil.generateRealmPrincipal(principal, ((SecurityRealm) 
assistant).getRealmName());
  -
  -                        if (realmPrincipal == null) throw new 
DeploymentException("Unable to create realm principal");
  -
  -                        principalSet.add(realmPrincipal);
  -                        roleDesignate.getPrincipals().add(realmPrincipal);
  -                    }
  -                    Set roleMapping = (Set) 
securityConfiguration.getRoleMapping().get(roleName);
  -                    if (roleMapping == null) {
  -                        roleMapping = new HashSet();
  -                        securityConfiguration.getRoleMapping().put(roleName, 
roleMapping);
  -                    }
  -                    roleMapping.addAll(principalSet);
  -
  -                    if (roleDesignate.getPrincipals().size() > 0 && 
runAsName.equals(roleName)) {
  -                        if (builder.getRunAs() != null) {
  -                            
builder.getRunAs().getPrincipals().addAll(roleDesignate.getPrincipals());
  -                        } else {
  -                            builder.setRunAs(roleDesignate);
  -                        }
  -                    }
  -                }
  -            }
  -        } catch (MalformedObjectNameException e) {
  -            throw new DeploymentException("Bad object name 
geronimo.security:type=SecurityRealm,realm=" + config.getSecurityRealm());
  -        }
       }
   
       protected void addExplicitMappings(SecurityConfiguration 
securityConfiguration,
                                          SecureBuilder builder,
                                          Security security,
  -                                       SecurityIdentityType securityIdentity,
  -                                       String runAsName)
  +                                       SecurityIdentityType securityIdentity)
               throws DeploymentException {
   
  -        Iterator rollMappings = security.getRoleMappings().iterator();
  +        String runAsName = ((securityIdentity != null && 
securityIdentity.getRunAs() != null) ? 
securityIdentity.getRunAs().getRoleName().getStringValue() : "");
  +        Iterator rollMappings = 
security.getRoleMappings().values().iterator();
           while (rollMappings.hasNext()) {
               Role role = (Role) rollMappings.next();
   
  @@ -466,7 +347,7 @@
               Subject roleDesignate = new Subject();
               Set principalSet = new HashSet();
   
  -            Iterator realms = role.getRealms().iterator();
  +            Iterator realms = role.getRealms().values().iterator();
               while (realms.hasNext()) {
                   Realm realm = (Realm) realms.next();
   
  @@ -497,6 +378,7 @@
                   }
               }
           }
  +        if (builder.getRunAs() == null) throw new DeploymentException("Role 
designate not found for role: " + runAsName);
       }
   
       /**
  
  
  
  1.4       +2 -1      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/EntityBuilder.java
  
  Index: EntityBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/EntityBuilder.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- EntityBuilder.java        11 Nov 2004 17:08:50 -0000      1.3
  +++ EntityBuilder.java        12 Nov 2004 21:29:21 -0000      1.4
  @@ -134,7 +134,8 @@
                   ((EjbJarType) ejbModule.getSpecDD()).getAssemblyDescriptor(),
                   entityBean.getEjbName().getStringValue(),
                   entityBean.getSecurityIdentity(),
  -                entityBean.getSecurityRoleRefArray());
  +                entityBean.getSecurityRoleRefArray(),
  +                getModuleBuilder().getSecurityService());
   
           processEnvironmentRefs(builder, earContext, ejbModule, entityBean, 
openejbEntityBean, null, cl);
   
  
  
  
  1.3       +2 -1      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/MdbBuilder.java
  
  Index: MdbBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/MdbBuilder.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- MdbBuilder.java   11 Nov 2004 14:25:26 -0000      1.2
  +++ MdbBuilder.java   12 Nov 2004 21:29:21 -0000      1.3
  @@ -179,7 +179,8 @@
                   ((EjbJarType) ejbModule.getSpecDD()).getAssemblyDescriptor(),
                   messageDrivenBean.getEjbName().getStringValue(),
                   messageDrivenBean.getSecurityIdentity(),
  -                null);
  +                null,
  +                getModuleBuilder().getSecurityService());
   
           UserTransactionImpl userTransaction;
           //TODO this is probably wrong???
  
  
  
  1.7       +22 -10    
openejb/modules/openejb-builder/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java
  
  Index: OpenEJBModuleBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- OpenEJBModuleBuilder.java 11 Nov 2004 17:08:50 -0000      1.6
  +++ OpenEJBModuleBuilder.java 12 Nov 2004 21:29:21 -0000      1.7
  @@ -80,11 +80,12 @@
   import org.apache.geronimo.schema.SchemaConversionUtils;
   import org.apache.geronimo.security.deploy.Security;
   import org.apache.geronimo.security.deployment.SecurityBuilder;
  +import org.apache.geronimo.security.SecurityService;
   import org.apache.geronimo.xbeans.geronimo.naming.GerResourceLocatorType;
   import org.apache.geronimo.xbeans.j2ee.EjbJarDocument;
   import org.apache.geronimo.xbeans.j2ee.EjbJarType;
   import org.apache.geronimo.xbeans.j2ee.EnterpriseBeansType;
  -import org.apache.geronimo.kernel.Kernel;
  +import org.apache.geronimo.xbeans.j2ee.SecurityRoleType;
   
   import org.apache.xmlbeans.XmlException;
   import org.apache.xmlbeans.XmlObject;
  @@ -116,7 +117,7 @@
    */
   public class OpenEJBModuleBuilder implements ModuleBuilder, 
EJBReferenceBuilder {
   
  -    private final Kernel kernel;
  +    private final SecurityService securityService;
       private final URI defaultParentId;
       private final CMPEntityBuilder cmpEntityBuilder;
       private final SessionBuilder sessionBuilder;
  @@ -125,8 +126,8 @@
       private final ContainerSecurityBuilder containerSecurityBuilder;
       private final SkeletonGenerator skeletonGenerator;
   
  -    public OpenEJBModuleBuilder(Kernel kernel, URI defaultParentId, 
SkeletonGenerator skeletonGenerator) {
  -        this.kernel = kernel;
  +    public OpenEJBModuleBuilder(SecurityService securityService, URI 
defaultParentId, SkeletonGenerator skeletonGenerator) {
  +        this.securityService = securityService;
           this.defaultParentId = defaultParentId;
           this.skeletonGenerator = skeletonGenerator;
           this.containerSecurityBuilder = new ContainerSecurityBuilder(this);
  @@ -136,8 +137,8 @@
           this.mdbBuilder = new MdbBuilder(this);
       }
   
  -    public Kernel getKernel() {
  -        return kernel;
  +    public SecurityService getSecurityService() {
  +        return securityService;
       }
   
       public ContainerSecurityBuilder getSecurityBuilder() {
  @@ -436,7 +437,7 @@
               transactionPolicyHelper = new TransactionPolicyHelper();
           }
   
  -        Security security = 
SecurityBuilder.buildSecurityConfig(openejbEjbJar.getSecurity());
  +        Security security = 
SecurityBuilder.buildSecurityConfig(openejbEjbJar.getSecurity(), 
collectRoleNames(ejbJar));
   
           EnterpriseBeansType enterpriseBeans = ejbJar.getEnterpriseBeans();
   
  @@ -451,6 +452,17 @@
           return null;
       }
   
  +    private static Set collectRoleNames(EjbJarType ejbJar) {
  +        Set roleNames = new HashSet();
  +
  +        SecurityRoleType[] securityRoles = 
ejbJar.getAssemblyDescriptor().getSecurityRoleArray();
  +        for (int i=0; i<securityRoles.length; i++) {
  +            roleNames.add(securityRoles[i].getRoleName().getStringValue());
  +        }
  +
  +        return roleNames;
  +    }
  +
       private static ObjectName getResourceContainerId(URI uri, 
GerResourceLocatorType resourceLocator, RefContext refContext, J2eeContext 
j2eeContext) throws DeploymentException {
           try {
               if (resourceLocator.isSetResourceLink()) {
  @@ -531,13 +543,13 @@
   
       static {
           GBeanInfoBuilder infoBuilder = new 
GBeanInfoBuilder(OpenEJBModuleBuilder.class);
  -        infoBuilder.addAttribute("kernel", Kernel.class, false);
  +        infoBuilder.addReference("SecurityService", SecurityService.class);
           infoBuilder.addAttribute("defaultParentId", URI.class, true);
           infoBuilder.addReference("SkeletonGenerator", 
SkeletonGenerator.class);
           infoBuilder.addInterface(ModuleBuilder.class);
           infoBuilder.addInterface(EJBReferenceBuilder.class);
   
  -        infoBuilder.setConstructor(new String[] {"kernel", 
"defaultParentId", "SkeletonGenerator"});
  +        infoBuilder.setConstructor(new String[] {"SecurityService", 
"defaultParentId", "SkeletonGenerator"});
           GBEAN_INFO = infoBuilder.getBeanInfo();
       }
   
  
  
  
  1.4       +2 -1      
openejb/modules/openejb-builder/src/java/org/openejb/deployment/SessionBuilder.java
  
  Index: SessionBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/openejb-builder/src/java/org/openejb/deployment/SessionBuilder.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- SessionBuilder.java       11 Nov 2004 17:08:50 -0000      1.3
  +++ SessionBuilder.java       12 Nov 2004 21:29:21 -0000      1.4
  @@ -126,7 +126,8 @@
                   ((EjbJarType) ejbModule.getSpecDD()).getAssemblyDescriptor(),
                   sessionBean.getEjbName().getStringValue(),
                   sessionBean.getSecurityIdentity(),
  -                sessionBean.getSecurityRoleRefArray());
  +                sessionBean.getSecurityRoleRefArray(),
  +                getModuleBuilder().getSecurityService());
   
           UserTransactionImpl userTransaction;
           if 
("Bean".equals(sessionBean.getTransactionType().getStringValue())) {
  
  
  

Reply via email to