[jboss-cvs] Picketbox SVN: r327 - trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 27 22:58:24 EDT 2012


Author: sguilhen at redhat.com
Date: 2012-04-27 22:58:08 -0400 (Fri, 27 Apr 2012)
New Revision: 327

Modified:
   trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossServerAuthConfig.java
   trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/SecurityActions.java
Log:
check if a jboss module has been specified when instantiating the JASPI auth modules

Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossServerAuthConfig.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossServerAuthConfig.java	2012-04-24 02:22:19 UTC (rev 326)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/JBossServerAuthConfig.java	2012-04-28 02:58:08 UTC (rev 327)
@@ -48,6 +48,8 @@
 import org.jboss.security.config.ApplicationPolicy;
 import org.jboss.security.config.ControlFlag;
 import org.jboss.security.config.SecurityConfiguration;
+import org.jboss.security.plugins.ClassLoaderLocator;
+import org.jboss.security.plugins.ClassLoaderLocatorFactory;
 
 //$Id$
 
@@ -136,6 +138,17 @@
       {
          JASPIAuthenticationInfo jai = (JASPIAuthenticationInfo)bai;
          AuthModuleEntry[] amearr = jai.getAuthModuleEntry();
+
+         // establish the module classloader if a jboss-module has been specified.
+         ClassLoader moduleCL = null;
+         String jbossModule = jai.getJBossModuleName();
+         if (jbossModule != null && !jbossModule.isEmpty())
+         {
+            ClassLoaderLocator locator = ClassLoaderLocatorFactory.get();
+            if (locator != null)
+               moduleCL = locator.get(jbossModule);
+         }
+
          for(AuthModuleEntry ame: amearr)
          {
             if(ame.getLoginModuleStackHolderName() != null)
@@ -144,7 +157,7 @@
                {
                   mapOptionsByName.put(ame.getAuthModuleName(), ame.getOptions());
                   controlFlags.add(ame.getControlFlag());   
-                  ServerAuthModule sam = this.createSAM(ame.getAuthModuleName(), 
+                  ServerAuthModule sam = this.createSAM(moduleCL, ame.getAuthModuleName(), 
                         ame.getLoginModuleStackHolderName());
                   
                   Map options = new HashMap();
@@ -163,7 +176,7 @@
                {
                   mapOptionsByName.put(ame.getAuthModuleName(), ame.getOptions());
                   controlFlags.add(ame.getControlFlag());             
-                  ServerAuthModule sam = this.createSAM(ame.getAuthModuleName());
+                  ServerAuthModule sam = this.createSAM(moduleCL, ame.getAuthModuleName());
                   
                   Map options = new HashMap(); 
                   sam.initialize(null, null, callbackHandler, options);
@@ -224,19 +237,19 @@
    }  
  
    @SuppressWarnings({"rawtypes", "unchecked"})
-   private ServerAuthModule createSAM(String name )
+   private ServerAuthModule createSAM(ClassLoader moduleCL, String name )
    throws Exception
    {
-      Class clazz = SecurityActions.getContextClassLoader().loadClass(name);
+      Class clazz = SecurityActions.loadClass(moduleCL, name);
       Constructor ctr = clazz.getConstructor(new Class[0]);
       return (ServerAuthModule) ctr.newInstance(new Object[0]);
    }
    
    @SuppressWarnings({"unchecked", "rawtypes"})
-   private ServerAuthModule createSAM(String name, String lmshName )
+   private ServerAuthModule createSAM(ClassLoader moduleCL, String name, String lmshName )
    throws Exception
    {
-      Class clazz = SecurityActions.getContextClassLoader().loadClass(name);
+      Class clazz = SecurityActions.loadClass(moduleCL, name);
       Constructor ctr = clazz.getConstructor(new Class[]{String.class});
       return (ServerAuthModule) ctr.newInstance(new Object[]{lmshName});
    }

Modified: trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/SecurityActions.java
===================================================================
--- trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/SecurityActions.java	2012-04-24 02:22:19 UTC (rev 326)
+++ trunk/security-jboss-sx/jbosssx/src/main/java/org/jboss/security/auth/message/config/SecurityActions.java	2012-04-28 02:58:08 UTC (rev 327)
@@ -23,6 +23,8 @@
 
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 
 import org.jboss.security.SecurityContext;
 import org.jboss.security.SecurityContextAssociation;
@@ -36,17 +38,17 @@
  *  @version $Revision$
  */
 class SecurityActions
-{   
+{
    static ClassLoader getContextClassLoader()
    {
       return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
-      { 
+      {
          public ClassLoader run()
-         { 
+         {
             return Thread.currentThread().getContextClassLoader();
          }
-       });
-      
+      });
+
    }
 
    static SecurityContext getSecurityContext()
@@ -55,9 +57,56 @@
       {
 
          public SecurityContext run()
-         { 
+         {
             return SecurityContextAssociation.getSecurityContext();
          }
-       });
+      });
    }
+
+   static Class<?> loadClass(final ClassLoader cl, final String name) throws PrivilegedActionException
+   {
+      return AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>()
+      {
+         public Class<?> run() throws PrivilegedActionException
+         {
+            if (cl == null)
+            {
+               return loadClass(name);
+            }
+            try
+            {
+               return cl.loadClass(name);
+            }
+            catch (Exception ignore)
+            {
+               return loadClass(name);
+            }
+         }
+      });
+   }
+
+   static Class<?> loadClass(final String name) throws PrivilegedActionException
+   {
+      return AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>()
+      {
+         public Class<?> run() throws PrivilegedActionException
+         {
+            try
+            {
+               return getClass().getClassLoader().loadClass(name);
+            }
+            catch (Exception ignore)
+            {
+               try
+               {
+                  return getContextClassLoader().loadClass(name);
+               }
+               catch (Exception e)
+               {
+                  throw new PrivilegedActionException(e);
+               }
+            }
+         }
+      });
+   }
 }



More information about the jboss-cvs-commits mailing list