[jboss-cvs] JBossAS SVN: r106605 - in trunk/security/src: main/java/org/jboss/security/integration/password and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Mon Jul 12 14:41:20 EDT 2010


Author: mmoyses
Date: 2010-07-12 14:41:19 -0400 (Mon, 12 Jul 2010)
New Revision: 106605

Modified:
   trunk/security/src/etc/deploy/security-jboss-beans.xml
   trunk/security/src/main/java/org/jboss/security/integration/password/PasswordLifecycleCallback.java
Log:
JBAS-8160: allowing multiple annotations per bean

Modified: trunk/security/src/etc/deploy/security-jboss-beans.xml
===================================================================
--- trunk/security/src/etc/deploy/security-jboss-beans.xml	2010-07-12 17:54:03 UTC (rev 106604)
+++ trunk/security/src/etc/deploy/security-jboss-beans.xml	2010-07-12 18:41:19 UTC (rev 106605)
@@ -23,20 +23,6 @@
         <property name="passwordManagement"><inject bean="JBossSecurityPasswordMaskManagement"/></property>
    </lifecycle-configure>
   
-  <lifecycle-create xmlns="urn:jboss:aop-beans:1.0"
-        name="PasswordCreateDestroyAdvice"
-        class="org.jboss.security.integration.password.PasswordLifecycleCallback"
-        classes="@org.jboss.security.integration.password.Password">
-        <property name="passwordManagement"><inject bean="JBossSecurityPasswordMaskManagement"/></property>
-  </lifecycle-create>
-
-  <lifecycle-install xmlns="urn:jboss:aop-beans:1.0"
-       name="PasswordStartStopAdvice"
-       class="org.jboss.security.integration.password.PasswordLifecycleCallback"
-       classes="@org.jboss.security.integration.password.Password">
-       <property name="passwordManagement"><inject bean="JBossSecurityPasswordMaskManagement"/></property>
-   </lifecycle-install>
-
    <!--  Establish the basic XML Based Configuration-->
    <bean name="XMLLoginConfig" class="org.jboss.security.auth.login.XMLLoginConfig">
       <property name="configResource">login-config.xml</property>

Modified: trunk/security/src/main/java/org/jboss/security/integration/password/PasswordLifecycleCallback.java
===================================================================
--- trunk/security/src/main/java/org/jboss/security/integration/password/PasswordLifecycleCallback.java	2010-07-12 17:54:03 UTC (rev 106604)
+++ trunk/security/src/main/java/org/jboss/security/integration/password/PasswordLifecycleCallback.java	2010-07-12 18:41:19 UTC (rev 106605)
@@ -21,14 +21,20 @@
  */
 package org.jboss.security.integration.password;
 
+import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
 
 import org.jboss.aop.joinpoint.Invocation;
 import org.jboss.aop.joinpoint.MethodInvocation;
+import org.jboss.beans.metadata.spi.AnnotationMetaData;
+import org.jboss.beans.metadata.spi.BeanMetaData;
 import org.jboss.dependency.spi.ControllerContext;
+import org.jboss.kernel.plugins.dependency.AbstractKernelControllerContext;
 import org.jboss.kernel.spi.dependency.KernelControllerContext;
 import org.jboss.logging.Logger;
-import org.jboss.metadata.spi.MetaData;
 
 /**
  * AOP Lifecycle callback for the @Password annotation
@@ -94,39 +100,51 @@
    public void install(ControllerContext context) throws Exception
    {
       //Get the password
-      Password passwordAnnotation = readPasswordAnnotation(context);
-      boolean trace = log.isTraceEnabled();
-      if( trace )
-         log.trace("Binding into JNDI: " + context.getName() + ", passwordInfo: " + passwordAnnotation);
-      
-      String securityDomain = passwordAnnotation.securityDomain();
-      
-      char[] passwd = this.passwordManagement.getPassword(securityDomain);
-      
-      if(passwd == null)
-         log.trace("Password does not exist for security domain=" + securityDomain);
-      //The bean in question is the target
-      String methodName = passwordAnnotation.methodName();
-      Object target = context.getTarget(); 
-      if(trace)
+      List<Password> passwordAnnotations = readPasswordAnnotation(context);
+      for (Password passwordAnnotation : passwordAnnotations)
       {
-         log.trace("Trying to set password on " + target + " with method :" + methodName);
+
+         boolean trace = log.isTraceEnabled();
+         if (trace)
+            log.trace("Binding into JNDI: " + context.getName() + ", passwordInfo: " + passwordAnnotation);
+
+         String securityDomain = passwordAnnotation.securityDomain();
+
+         char[] passwd = this.passwordManagement.getPassword(securityDomain);
+
+         if (passwd == null)
+            log.trace("Password does not exist for security domain=" + securityDomain);
+         //The bean in question is the target
+         String methodName = passwordAnnotation.methodName();
+         Object target = context.getTarget();
+         if (trace)
+         {
+            log.trace("Trying to set password on " + target + " with method :" + methodName);
+         }
+         this.setPassword(target, passwordAnnotation, passwd);
       }
-      this.setPassword(target, passwordAnnotation, passwd);
    }
    
    public void uninstall(ControllerContext context) throws Exception
    {
       //ignore
    }
-
    
-   private Password readPasswordAnnotation(ControllerContext context) throws Exception
+   private List<Password> readPasswordAnnotation(ControllerContext context) throws Exception
    {
-      MetaData metaData = context.getScopeInfo().getMetaData();
-      if (metaData != null)
-         return metaData.getAnnotation(Password.class);
-      return null;
+      List<Password> passwordAnnotations = new ArrayList<Password>();
+      AbstractKernelControllerContext akcc = (AbstractKernelControllerContext) context;
+      BeanMetaData bmd = akcc.getBeanMetaData();
+      Set<AnnotationMetaData> annotations = bmd.getAnnotations();
+      for (AnnotationMetaData annotationMetaData : annotations)
+      {
+         Annotation annotation = annotationMetaData.getAnnotationInstance();
+         if (annotation.annotationType() == Password.class)
+         {
+            passwordAnnotations.add((Password) annotation);
+         }
+      }
+      return passwordAnnotations;
    }
    
    private void setPassword(Object target, Password passwordAnnotation, char[] passwd) throws Exception



More information about the jboss-cvs-commits mailing list