[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