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

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Sep 4 10:27:52 EDT 2013


Author: sguilhen at redhat.com
Date: 2013-09-04 10:27:52 -0400 (Wed, 04 Sep 2013)
New Revision: 448

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:
Add constructor cache in SecurityContextFactory to avoid unnecessary reflection calls

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	2013-09-04 13:51:57 UTC (rev 447)
+++ trunk/security-spi/spi/src/main/java/org/jboss/security/SecurityContextFactory.java	2013-09-04 14:27:52 UTC (rev 448)
@@ -35,12 +35,15 @@
  */
 @SuppressWarnings("unchecked")
 public class SecurityContextFactory
-{      
+{
+   private static final Class[] CONSTRUCTOR_TYPES = new Class[]{String.class};
+
    private static String defaultFQN = "org.jboss.security.plugins.JBossSecurityContext";
    
    private static String defaultUtilClassFQN = "org.jboss.security.plugins.JBossSecurityContextUtil";
    
    private static Class<? extends SecurityContext> defaultSecurityContextClass = null;
+   private static Constructor<SecurityContext> defaultSecurityContextConstructor = null;
    private static Class<? extends SecurityContextUtil> defaultUtilClass = null;
    
    /**
@@ -77,6 +80,15 @@
          {
          }
       }
+      if (defaultSecurityContextClass != null) {
+         try
+         {
+            defaultSecurityContextConstructor = (Constructor<SecurityContext>) defaultSecurityContextClass.getConstructor(CONSTRUCTOR_TYPES);
+         }
+         catch(Exception e)
+         {
+         }
+      }
    }
 
    /**
@@ -87,6 +99,8 @@
     */
    public static SecurityContext createSecurityContext(String securityDomain) throws Exception
    {
+      if (defaultSecurityContextConstructor != null)
+          return createSecurityContext(securityDomain, defaultSecurityContextConstructor);
       if(defaultSecurityContextClass != null)
          return createSecurityContext(securityDomain, defaultSecurityContextClass);
       return createSecurityContext(securityDomain, defaultFQN, SecuritySPIActions.getCurrentClassLoader(SecurityContextFactory.class));
@@ -101,6 +115,8 @@
     */
    public static SecurityContext createSecurityContext(String securityDomain, ClassLoader classLoader) throws Exception
    {
+      if (defaultSecurityContextConstructor != null)
+         return createSecurityContext(securityDomain, defaultSecurityContextConstructor);
       if(defaultSecurityContextClass != null)
          return createSecurityContext(securityDomain, defaultSecurityContextClass);
       return createSecurityContext(securityDomain, defaultFQN, classLoader);
@@ -135,7 +151,8 @@
       if(fqnClass == null)
          throw PicketBoxMessages.MESSAGES.invalidNullArgument("fqnClass");
       defaultSecurityContextClass = getContextClass(fqnClass, classLoader);
-      return createSecurityContext(securityDomain, defaultSecurityContextClass);
+      defaultSecurityContextConstructor = (Constructor<SecurityContext>) defaultSecurityContextClass.getConstructor(CONSTRUCTOR_TYPES);
+      return createSecurityContext(securityDomain, defaultSecurityContextConstructor);
    }
    
    
@@ -156,10 +173,19 @@
        if(clazz == null)
          throw PicketBoxMessages.MESSAGES.invalidNullArgument("clazz");
       //Get the CTR
-      Constructor<? extends SecurityContext> ctr = clazz.getConstructor(new Class[]{String.class});
-      return (SecurityContext) ctr.newInstance(new Object[]{securityDomain}); 
+      Constructor<? extends SecurityContext> ctr = clazz.getConstructor(CONSTRUCTOR_TYPES);
+      return ctr.newInstance(securityDomain);
    }
-   
+
+   private static SecurityContext createSecurityContext(String securityDomain, Constructor<SecurityContext> constructor) throws Exception
+   {
+      if (securityDomain == null)
+         throw PicketBoxMessages.MESSAGES.invalidNullArgument("security domain");
+      if (constructor == null)
+         throw PicketBoxMessages.MESSAGES.invalidNullArgument("constructor");
+      return constructor.newInstance(securityDomain);
+   }
+
    /**
     * Create a security context
     * @param p Principal

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	2013-09-04 13:51:57 UTC (rev 447)
+++ trunk/security-spi/spi/src/main/java/org/jboss/security/SecuritySPIActions.java	2013-09-04 14:27:52 UTC (rev 448)
@@ -31,18 +31,19 @@
  *  @version $Revision$
  */
 class SecuritySPIActions
-{  
+{
+   static final PrivilegedAction<ClassLoader> GET_CONTEXT_CLASSLOADER = new PrivilegedAction<ClassLoader>() {
+
+       public ClassLoader run() {
+           return Thread.currentThread().getContextClassLoader();
+       }
+   };
+
    static ClassLoader getContextClassLoader()
    {
       if (System.getSecurityManager() != null)
       {
-         return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
-         {
-            public ClassLoader run()
-            {
-              return Thread.currentThread().getContextClassLoader();
-            }
-         });
+         return AccessController.doPrivileged(GET_CONTEXT_CLASSLOADER);
       }
       else
          return Thread.currentThread().getContextClassLoader();



More information about the jboss-cvs-commits mailing list