[jboss-cvs] JBossAS SVN: r80798 - in projects/ejb3/trunk: security/src/main/java/org/jboss/ejb3/security/bridge and 7 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Nov 11 11:09:03 EST 2008


Author: wolfc
Date: 2008-11-11 11:09:03 -0500 (Tue, 11 Nov 2008)
New Revision: 80798

Added:
   projects/ejb3/trunk/security/src/main/java/org/jboss/ejb3/security/bridge/RunAsMetaDataBridge.java
   projects/ejb3/trunk/security/src/test/java/org/
   projects/ejb3/trunk/security/src/test/java/org/jboss/
   projects/ejb3/trunk/security/src/test/java/org/jboss/ejb3/
   projects/ejb3/trunk/security/src/test/java/org/jboss/ejb3/security/
   projects/ejb3/trunk/security/src/test/java/org/jboss/ejb3/security/test/
   projects/ejb3/trunk/security/src/test/java/org/jboss/ejb3/security/test/runas/
   projects/ejb3/trunk/security/src/test/java/org/jboss/ejb3/security/test/runas/RunAsMetaDataBridgeUnitTest.java
Modified:
   projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
Log:
EJBTHREE-1578: created RunAsMetaDataBridge

Modified: projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java
===================================================================
--- projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java	2008-11-11 16:08:11 UTC (rev 80797)
+++ projects/ejb3/trunk/core/src/main/java/org/jboss/ejb3/aop/BeanContainer.java	2008-11-11 16:09:03 UTC (rev 80798)
@@ -39,6 +39,7 @@
 import org.jboss.ejb3.interceptors.metadata.InterceptorMetaDataBridge;
 import org.jboss.ejb3.metadata.MetaDataBridge;
 import org.jboss.ejb3.metadata.annotation.AnnotationRepositoryToMetaData;
+import org.jboss.ejb3.security.bridge.RunAsMetaDataBridge;
 import org.jboss.ejb3.security.bridge.SecurityDomainMetaDataBridge;
 import org.jboss.ejb3.tx.metadata.ApplicationExceptionComponentMetaDataLoaderFactory;
 import org.jboss.ejb3.tx.metadata.ApplicationExceptionMetaDataBridge;
@@ -196,6 +197,7 @@
       appExceptionBridges.add(new ApplicationExceptionMetaDataBridge());
       annotations.addComponentMetaDataLoaderFactory(new ApplicationExceptionComponentMetaDataLoaderFactory(appExceptionBridges));
       
+      annotations.addMetaDataBridge(new RunAsMetaDataBridge());
       //Add a security domain bridge
       annotations.addMetaDataBridge(new SecurityDomainMetaDataBridge());
       // Ensure that an @Clustered annotation is visible to AOP if the XML says the bean is  clustered.

Added: projects/ejb3/trunk/security/src/main/java/org/jboss/ejb3/security/bridge/RunAsMetaDataBridge.java
===================================================================
--- projects/ejb3/trunk/security/src/main/java/org/jboss/ejb3/security/bridge/RunAsMetaDataBridge.java	                        (rev 0)
+++ projects/ejb3/trunk/security/src/main/java/org/jboss/ejb3/security/bridge/RunAsMetaDataBridge.java	2008-11-11 16:09:03 UTC (rev 80798)
@@ -0,0 +1,74 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.security.bridge;
+
+import java.lang.annotation.Annotation;
+
+import javax.annotation.security.RunAs;
+
+import org.jboss.ejb3.annotation.impl.RunAsImpl;
+import org.jboss.ejb3.metadata.MetaDataBridge;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.spec.SecurityIdentityMetaData;
+import org.jboss.metadata.javaee.spec.RunAsMetaData;
+import org.jboss.metadata.spi.signature.DeclaredMethodSignature;
+
+/**
+ * Convert 
+ *   <security-identity>
+ *      <run-as>
+ *         <role-name>...</role-name>
+ *      </run-as>
+ *   </security-identity>
+ * to an annotation.
+ *
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class RunAsMetaDataBridge implements MetaDataBridge<JBossEnterpriseBeanMetaData>
+{
+   public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData metaData, ClassLoader classLoader)
+   {
+      if(annotationClass != RunAs.class)
+         return null;
+      
+      if(metaData == null)
+         return null;
+      
+      SecurityIdentityMetaData securityIdentity = metaData.getSecurityIdentity();
+      if(securityIdentity == null)
+         return null;
+      
+      RunAsMetaData runAs = securityIdentity.getRunAs();
+      if(runAs == null)
+         return null;
+      
+      // role-name is mandated by the xsd
+      return annotationClass.cast(new RunAsImpl(runAs.getRoleName()));
+   }
+
+   public <A extends Annotation> A retrieveAnnotation(Class<A> annotationClass, JBossEnterpriseBeanMetaData metaData, ClassLoader classLoader, DeclaredMethodSignature method)
+   {
+      // A RunAs can only appear on a class
+      return null;
+   }
+}

Added: projects/ejb3/trunk/security/src/test/java/org/jboss/ejb3/security/test/runas/RunAsMetaDataBridgeUnitTest.java
===================================================================
--- projects/ejb3/trunk/security/src/test/java/org/jboss/ejb3/security/test/runas/RunAsMetaDataBridgeUnitTest.java	                        (rev 0)
+++ projects/ejb3/trunk/security/src/test/java/org/jboss/ejb3/security/test/runas/RunAsMetaDataBridgeUnitTest.java	2008-11-11 16:09:03 UTC (rev 80798)
@@ -0,0 +1,98 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2008, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+ */
+package org.jboss.ejb3.security.test.runas;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+
+import javax.annotation.security.RunAs;
+
+import org.jboss.ejb3.annotation.SecurityDomain;
+import org.jboss.ejb3.security.bridge.RunAsMetaDataBridge;
+import org.jboss.metadata.ejb.jboss.JBossEnterpriseBeanMetaData;
+import org.jboss.metadata.ejb.jboss.JBossSessionBeanMetaData;
+import org.jboss.metadata.ejb.spec.SecurityIdentityMetaData;
+import org.jboss.metadata.javaee.spec.EmptyMetaData;
+import org.jboss.metadata.javaee.spec.RunAsMetaData;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * @author <a href="mailto:cdewolf at redhat.com">Carlo de Wolf</a>
+ * @version $Revision: $
+ */
+public class RunAsMetaDataBridgeUnitTest
+{
+   private static ClassLoader classLoader = null; // laziness
+   private static RunAsMetaDataBridge bridge;
+   
+   @BeforeClass
+   public static void beforeClass()
+   {
+      bridge = new RunAsMetaDataBridge();
+   }
+   
+   @Test
+   public void testNoSecurityIdentity()
+   {
+      JBossEnterpriseBeanMetaData bean = new JBossSessionBeanMetaData();
+      RunAs runAs = bridge.retrieveAnnotation(RunAs.class, bean, classLoader);
+      assertNull(runAs);
+   }
+   
+   @Test
+   public void testOtherAnnotation()
+   {
+      RunAsMetaData runAsMetaData = new RunAsMetaData();
+      runAsMetaData.setRoleName("test");
+      SecurityIdentityMetaData securityIdentity = new SecurityIdentityMetaData();
+      securityIdentity.setRunAs(runAsMetaData);
+      JBossEnterpriseBeanMetaData bean = new JBossSessionBeanMetaData();
+      bean.setSecurityIdentity(securityIdentity);
+      SecurityDomain securityDomain = bridge.retrieveAnnotation(SecurityDomain.class, bean, classLoader);
+      assertNull(securityDomain);
+   }
+   
+   @Test
+   public void testRunAs()
+   {
+      RunAsMetaData runAsMetaData = new RunAsMetaData();
+      runAsMetaData.setRoleName("test");
+      SecurityIdentityMetaData securityIdentity = new SecurityIdentityMetaData();
+      securityIdentity.setRunAs(runAsMetaData);
+      JBossEnterpriseBeanMetaData bean = new JBossSessionBeanMetaData();
+      bean.setSecurityIdentity(securityIdentity);
+      RunAs runAs = bridge.retrieveAnnotation(RunAs.class, bean, classLoader);
+      assertEquals("test", runAs.value());
+   }
+   
+   @Test
+   public void testUseCallerIdentity()
+   {
+      SecurityIdentityMetaData securityIdentity = new SecurityIdentityMetaData();
+      securityIdentity.setUseCallerIdentity(new EmptyMetaData());
+      JBossEnterpriseBeanMetaData bean = new JBossSessionBeanMetaData();
+      bean.setSecurityIdentity(securityIdentity);
+      RunAs runAs = bridge.retrieveAnnotation(RunAs.class, bean, classLoader);
+      assertNull(runAs);
+   }
+}




More information about the jboss-cvs-commits mailing list