[jboss-cvs] Picketbox SVN: r200 - trunk/security-spi/spi/src/main/java/org/jboss/security.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Apr 19 10:48:07 EDT 2011


Author: mmoyses
Date: 2011-04-19 10:48:07 -0400 (Tue, 19 Apr 2011)
New Revision: 200

Modified:
   trunk/security-spi/spi/src/main/java/org/jboss/security/SecurityContextFactory.java
   trunk/security-spi/spi/src/main/java/org/jboss/security/SecuritySPIActions.java
Log:
SECURITY-587: add ClassLoader parameter to methods

Modified: trunk/security-spi/spi/src/main/java/org/jboss/security/SecurityContextFactory.java
===================================================================
--- trunk/security-spi/spi/src/main/java/org/jboss/security/SecurityContextFactory.java	2011-04-18 20:21:42 UTC (rev 199)
+++ trunk/security-spi/spi/src/main/java/org/jboss/security/SecurityContextFactory.java	2011-04-19 14:48:07 UTC (rev 200)
@@ -51,16 +51,31 @@
    {
       try
       {
-         defaultSecurityContextClass = (Class<? extends SecurityContext>) SecuritySPIActions.getContextClassLoader().loadClass(defaultFQN);
+         defaultSecurityContextClass = (Class<? extends SecurityContext>) SecuritySPIActions.getCurrentClassLoader(SecurityContextFactory.class).loadClass(defaultFQN);
       }
       catch(Exception ignore)
-      {}
+      {
+         try
+         {
+            defaultSecurityContextClass = (Class<? extends SecurityContext>) SecuritySPIActions.getContextClassLoader().loadClass(defaultFQN);
+         }
+         catch (Exception e)
+         {
+         }
+      }
       try
       {
-         defaultUtilClass = (Class<? extends SecurityContextUtil>) SecuritySPIActions.getContextClassLoader().loadClass(defaultUtilClassFQN); 
+         defaultUtilClass = (Class<? extends SecurityContextUtil>) SecuritySPIActions.getCurrentClassLoader(SecurityContextFactory.class).loadClass(defaultUtilClassFQN);
       }
       catch(Exception ignore)
-      {   
+      {
+         try
+         {
+            defaultUtilClass = (Class<? extends SecurityContextUtil>) SecuritySPIActions.getContextClassLoader().loadClass(defaultUtilClassFQN);
+         }
+         catch(Exception e)
+         {
+         }
       }
    }
 
@@ -74,10 +89,24 @@
    {
       if(defaultSecurityContextClass != null)
          return createSecurityContext(securityDomain, defaultSecurityContextClass);
-      return createSecurityContext(securityDomain, defaultFQN);
+      return createSecurityContext(securityDomain, defaultFQN, SecuritySPIActions.getCurrentClassLoader(SecurityContextFactory.class));
    }
    
    /**
+    * Create a security context 
+    * @param securityDomain Security Domain driving the context
+    * @param classLoader ClassLoader to use
+    * @return
+    * @throws Exception 
+    */
+   public static SecurityContext createSecurityContext(String securityDomain, ClassLoader classLoader) throws Exception
+   {
+      if(defaultSecurityContextClass != null)
+         return createSecurityContext(securityDomain, defaultSecurityContextClass);
+      return createSecurityContext(securityDomain, defaultFQN, classLoader);
+   }
+   
+   /**
     * Construct a SecurityContext
     * @param securityDomain  The Security Domain
     * @param fqnClass  Fully Qualified Name of the SecurityContext Class
@@ -87,12 +116,26 @@
    public static SecurityContext createSecurityContext(String securityDomain,
          String fqnClass) throws Exception
    {
+      return createSecurityContext(securityDomain, fqnClass, SecuritySPIActions.getCurrentClassLoader(SecurityContextFactory.class));
+   }
+   
+   /**
+    * Construct a SecurityContext
+    * @param securityDomain  The Security Domain
+    * @param fqnClass  Fully Qualified Name of the SecurityContext Class
+    * @param classLoader ClassLoader to use
+    * @return an instance of SecurityContext
+    * @throws Exception
+    */
+   public static SecurityContext createSecurityContext(String securityDomain,
+         String fqnClass, ClassLoader classLoader) throws Exception
+   {
       if(securityDomain == null)
          throw new IllegalArgumentException("securityDomain is null");
       if(fqnClass == null)
          throw new IllegalArgumentException("fqnClass is null");
-      defaultSecurityContextClass = getContextClass(fqnClass);
-      return createSecurityContext(securityDomain, defaultSecurityContextClass); 
+      defaultSecurityContextClass = getContextClass(fqnClass, classLoader);
+      return createSecurityContext(securityDomain, defaultSecurityContextClass);
    }
    
    
@@ -128,9 +171,26 @@
     * @see #createSecurityContext(String)
     */
    public static SecurityContext createSecurityContext(Principal p, 
-         Object cred,Subject s, String securityDomain) throws Exception
+         Object cred, Subject s, String securityDomain) throws Exception
    {
-      SecurityContext jsc = createSecurityContext(securityDomain);
+      return createSecurityContext(p, cred, s, securityDomain, SecuritySPIActions.getCurrentClassLoader(SecurityContextFactory.class));
+   }
+   
+   /**
+    * Create a security context
+    * @param p Principal
+    * @param cred Credential
+    * @param s Subject
+    * @param securityDomain SecurityDomain
+    * @param classLoader ClassLoader to use
+    * @return
+    * @throws Exception 
+    * @see #createSecurityContext(String)
+    */
+   public static SecurityContext createSecurityContext(Principal p, 
+         Object cred, Subject s, String securityDomain, ClassLoader classLoader) throws Exception
+   {
+      SecurityContext jsc = createSecurityContext(securityDomain, classLoader);
       jsc.getUtil().createSubjectInfo(p,cred,s);
       return jsc;
    }
@@ -142,30 +202,43 @@
     * @param s Subject
     * @param securityDomain SecurityDomain
     * @param fqnClass FQN of the SecurityContext class to be instantiated
+    * @param classLoader ClassLoader to use
     * @return
     * @see #createSecurityContext(String)
     * @throws Exception
     */
    public static SecurityContext createSecurityContext(Principal p, 
-         Object cred,Subject s, String securityDomain, String fqnClass) 
+         Object cred,Subject s, String securityDomain, String fqnClass, ClassLoader classLoader) 
    throws Exception
    {
-      SecurityContext sc = createSecurityContext(securityDomain, fqnClass);
+      SecurityContext sc = createSecurityContext(securityDomain, fqnClass, classLoader);
       sc.getUtil().createSubjectInfo(p,cred,s);
       return sc;
    }
    
    /**
     * Return an instance of the SecurityContextUtil
+    * @param sc SecurityContext
     * @return
     */
    public static SecurityContextUtil createUtil(SecurityContext sc) throws Exception
    {
+      return createUtil(sc, SecuritySPIActions.getCurrentClassLoader(SecurityContextFactory.class));
+   }
+   
+   /**
+    * Return an instance of the SecurityContextUtil
+    * @param sc SecurityContext
+    * @param classLoader ClassLoader to use
+    * @return
+    */
+   public static SecurityContextUtil createUtil(SecurityContext sc, ClassLoader classLoader) throws Exception
+   {
       Class<? extends SecurityContextUtil> clazz = defaultUtilClass;
       
       if(clazz  == null)
       {
-         clazz = (Class<? extends SecurityContextUtil>) loadClass(defaultUtilClassFQN);
+         clazz = (Class<? extends SecurityContextUtil>) loadClass(defaultUtilClassFQN, classLoader);
          defaultUtilClass = clazz; 
       }
       
@@ -173,7 +246,7 @@
       Constructor<?> ctr = clazz.getConstructor(new Class[]{SecurityContext.class});
       Object obj = ctr.newInstance(new Object[]{sc});
       return SecurityContextUtil.class.cast(obj);
-   } 
+   }
    
    /**
     * Return an instance of the SecurityContextUtil given a FQN of the util class
@@ -183,12 +256,32 @@
     */ 
    public static SecurityContextUtil createUtil(SecurityContext sc, String utilFQN) throws Exception
    {
-      ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
-      Class<?> clazz = tcl.loadClass(utilFQN);
+      return createUtil(sc, utilFQN, SecuritySPIActions.getCurrentClassLoader(SecurityContextFactory.class));
+   }
+   
+   /**
+    * Return an instance of the SecurityContextUtil given a FQN of the util class
+    * @param sc SecurityContext
+    * @param utilFQN fqn of the util class
+    * @param classLoader ClassLoader to use
+    * @return
+    */ 
+   public static SecurityContextUtil createUtil(SecurityContext sc, String utilFQN, ClassLoader classLoader) throws Exception
+   {
+      Class<?> clazz = null;
+      try
+      {
+         clazz = classLoader.loadClass(utilFQN);
+      }
+      catch (Exception e)
+      {
+         ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
+         clazz = tcl.loadClass(utilFQN);
+      }
       //Get the CTR
       Constructor<? extends SecurityContextUtil> ctr = 
          (Constructor<? extends SecurityContextUtil>) clazz.getConstructor(new Class[]{SecurityContext.class});
-      return ctr.newInstance(new Object[]{sc}); 
+      return ctr.newInstance(new Object[]{sc});
    }
    
    /**
@@ -229,18 +322,33 @@
    /**
     * Load a class
     * @param fqn
+    * @param classLoader
     * @return
     * @throws Exception
     */
-   private static Class<?> loadClass(String fqn) throws Exception
+   private static Class<?> loadClass(String fqn, ClassLoader classLoader) throws Exception
    {
-      ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
-      return tcl.loadClass(fqn);
+      try
+      {
+         return classLoader.loadClass(fqn);
+      }
+      catch (Exception e)
+      {
+         ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
+         return tcl.loadClass(fqn);
+      }
    }
     
-   private static Class<SecurityContext> getContextClass(String className) throws Exception
+   private static Class<SecurityContext> getContextClass(String className, ClassLoader classLoader) throws Exception
    {
-      ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
-      return (Class<SecurityContext>) tcl.loadClass(className);
+      try
+      {
+         return (Class<SecurityContext>) classLoader.loadClass(className);
+      }
+      catch (Exception e)
+      {
+         ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
+         return (Class<SecurityContext>) tcl.loadClass(className);
+      }
    }
 }
\ No newline at end of file

Modified: trunk/security-spi/spi/src/main/java/org/jboss/security/SecuritySPIActions.java
===================================================================
--- trunk/security-spi/spi/src/main/java/org/jboss/security/SecuritySPIActions.java	2011-04-18 20:21:42 UTC (rev 199)
+++ trunk/security-spi/spi/src/main/java/org/jboss/security/SecuritySPIActions.java	2011-04-19 14:48:07 UTC (rev 200)
@@ -34,7 +34,7 @@
 {  
    static ClassLoader getContextClassLoader()
    {
-      return AccessController.doPrivileged( new PrivilegedAction<ClassLoader>() 
+      return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>() 
       {
          public ClassLoader run()
          {
@@ -42,4 +42,15 @@
          }
       });
    }
+   
+   static ClassLoader getCurrentClassLoader(final Class clazz)
+   {
+      return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+      {
+         public ClassLoader run()
+         {
+            return clazz.getClassLoader();
+         }
+      });
+   }
 }
\ No newline at end of file



More information about the jboss-cvs-commits mailing list