[jboss-cvs] JBossAS SVN: r66931 - in projects/metadata/trunk/src/main/java/org/jboss/metadata: web/jboss and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Nov 9 12:49:40 EST 2007


Author: scott.stark at jboss.org
Date: 2007-11-09 12:49:40 -0500 (Fri, 09 Nov 2007)
New Revision: 66931

Modified:
   projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMetaData.java
   projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossWebMetaData.java
Log:
Add RunAsIdentityMetaData getRunAsIdentity(String ejbName) to ejb metadata.


Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMetaData.java	2007-11-09 17:41:52 UTC (rev 66930)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/ejb/jboss/JBossMetaData.java	2007-11-09 17:49:40 UTC (rev 66931)
@@ -21,6 +21,10 @@
 */
 package org.jboss.metadata.ejb.jboss;
 
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
 import javax.xml.bind.annotation.XmlAttribute;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.annotation.XmlTransient;
@@ -32,7 +36,13 @@
 import org.jboss.metadata.ejb.spec.EnterpriseBeansMetaData;
 import org.jboss.metadata.ejb.spec.InterceptorsMetaData;
 import org.jboss.metadata.ejb.spec.RelationsMetaData;
+import org.jboss.metadata.ejb.spec.SecurityIdentityMetaData;
+import org.jboss.metadata.javaee.jboss.RunAsIdentityMetaData;
+import org.jboss.metadata.javaee.spec.RunAsMetaData;
 import org.jboss.metadata.javaee.support.IdMetaDataImplWithDescriptionGroup;
+import org.jboss.metadata.web.jboss.JBossServletMetaData;
+import org.jboss.metadata.web.jboss.JBossServletsMetaData;
+import org.jboss.metadata.web.spec.ServletMetaData;
 
 /**
  * JBossMetaData.
@@ -105,7 +115,9 @@
    
    /** The interceptors */
    private InterceptorsMetaData interceptors;
-   
+   /** */
+   private Map<String, RunAsIdentityMetaData> runAsIdentity = new HashMap<String, RunAsIdentityMetaData>();
+
    /**
     * Create a new JBossMetaData.
     */
@@ -569,6 +581,39 @@
       this.assemblyDescriptor = assemblyDescriptor;
    }
 
+   /**
+    * Access the RunAsIdentity associated with the given servlet
+    * @param ejbName - the servlet-name from the web.xml
+    * @return RunAsIdentity for the servet if one exists, null otherwise
+    */
+   @XmlTransient
+   public RunAsIdentityMetaData getRunAsIdentity(String ejbName)
+   {
+      RunAsIdentityMetaData identity = runAsIdentity.get(ejbName);
+      if (identity == null)
+      {
+         JBossEnterpriseBeanMetaData ejb = this.getEnterpriseBean(ejbName);
+         if (ejb != null)
+         {
+            // Check for a ejb-jar.xml run-as only specification
+            synchronized (runAsIdentity)
+            {
+               SecurityIdentityMetaData si = ejb.getSecurityIdentity();
+               if(si != null)
+               {
+                  RunAsMetaData runAs = si.getRunAs();
+                  if (runAs != null)
+                  {
+                     String roleName = runAs.getRoleName();
+                     identity = new RunAsIdentityMetaData(roleName, null);
+                     runAsIdentity.put(ejbName, identity);
+                  }
+               }
+            }
+         }
+      }
+      return identity;
+   }
 
    /**
     * Merge the contents of override with original into this.
@@ -652,6 +697,42 @@
       
       boolean isEJB3x = (original == null || original.isEJB3x());
       enterpriseBeans.merge(jbeans, beans, "ejb-jar.xml", "jboss.xml", !isEJB3x);
+
+      // Update run-as indentity for a run-as-principal
+      if(enterpriseBeans != null)
+      {
+         for(JBossEnterpriseBeanMetaData ejb : enterpriseBeans)
+         {
+            String ejbName = ejb.getEjbName();
+            SecurityIdentityMetaData si = ejb.getSecurityIdentity();
+            String principalName = si != null ? si.getRunAsPrincipal() : null;
+            // Get the run-as primary role
+            String ejbXmlRunAs = null;
+            if(si != null && si.getRunAs() != null)
+               ejbXmlRunAs = si.getRunAs().getRoleName();
+            if (principalName != null)
+            {
+               // Update the run-as indentity to use the principal name
+               if (ejbXmlRunAs == null)
+               {
+                  throw new IllegalStateException("run-as-principal: " + principalName + " found in jboss.xml but there was no run-as in ejb-jar.xml");
+               }
+               // See if there are any additional roles for this principal
+               Set<String> extraRoles = null;
+               if(getAssemblyDescriptor() != null)
+               {
+                  extraRoles = getAssemblyDescriptor().getSecurityRoleNamesByPrincipal(principalName);
+               }
+               RunAsIdentityMetaData runAsId = new RunAsIdentityMetaData(ejbXmlRunAs, principalName, extraRoles);
+               runAsIdentity.put(ejbName, runAsId);
+            }
+            else if (ejbXmlRunAs != null)
+            {
+               RunAsIdentityMetaData runAsId = new RunAsIdentityMetaData(ejbXmlRunAs, null);
+               runAsIdentity.put(ejbName, runAsId);
+            }
+         }
+      }
    }
 
    /**

Modified: projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossWebMetaData.java
===================================================================
--- projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossWebMetaData.java	2007-11-09 17:41:52 UTC (rev 66930)
+++ projects/metadata/trunk/src/main/java/org/jboss/metadata/web/jboss/JBossWebMetaData.java	2007-11-09 17:49:40 UTC (rev 66931)
@@ -882,7 +882,7 @@
 
    /**
     *
-    * @return servlet/run-as <String servlet-name, SecurityRoleMetaData>
+    * @return servlet/run-as <String servlet-name, RunAsIdentityMetaData>
     */
    public Map<String, RunAsIdentityMetaData> getRunAsIdentity()
    {




More information about the jboss-cvs-commits mailing list