[jboss-cvs] JBossAS SVN: r81594 - projects/security/security-spi/trunk/spi/src/main/org/jboss/security.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Tue Nov 25 21:48:12 EST 2008
Author: anil.saldhana at jboss.com
Date: 2008-11-25 21:48:12 -0500 (Tue, 25 Nov 2008)
New Revision: 81594
Modified:
projects/security/security-spi/trunk/spi/src/main/org/jboss/security/SecurityContextFactory.java
Log:
SECURITY-328:
Modified: projects/security/security-spi/trunk/spi/src/main/org/jboss/security/SecurityContextFactory.java
===================================================================
--- projects/security/security-spi/trunk/spi/src/main/org/jboss/security/SecurityContextFactory.java 2008-11-26 02:45:41 UTC (rev 81593)
+++ projects/security/security-spi/trunk/spi/src/main/org/jboss/security/SecurityContextFactory.java 2008-11-26 02:48:12 UTC (rev 81594)
@@ -33,11 +33,36 @@
* @since Dec 28, 2006
* @version $Revision$
*/
+ at SuppressWarnings("unchecked")
public class SecurityContextFactory
{
private static String defaultFQN = "org.jboss.security.plugins.JBossSecurityContext";
- private static String defaultUtilClass = "org.jboss.security.plugins.JBossSecurityContextUtil";
+ private static String defaultUtilClassFQN = "org.jboss.security.plugins.JBossSecurityContextUtil";
+
+ private static Class<? extends SecurityContext> defaultSecurityContextClass = null;
+ private static Class<? extends SecurityContextUtil> defaultUtilClass = null;
+
+ /**
+ * Classloader.loadClass is a synchronized method in the JDK. Under heavy concurrent requests,
+ * a loadClass() operation can be extremely troublesome for performance
+ */
+ static
+ {
+ try
+ {
+ defaultSecurityContextClass = (Class<? extends SecurityContext>) SecuritySPIActions.getContextClassLoader().loadClass(defaultFQN);
+ }
+ catch(Exception ignore)
+ {}
+ try
+ {
+ defaultUtilClass = (Class<? extends SecurityContextUtil>) SecuritySPIActions.getContextClassLoader().loadClass(defaultUtilClassFQN);
+ }
+ catch(Exception ignore)
+ {
+ }
+ }
/**
* Create a security context
@@ -47,6 +72,8 @@
*/
public static SecurityContext createSecurityContext(String securityDomain) throws Exception
{
+ if(defaultSecurityContextClass != null)
+ return createSecurityContext(securityDomain, defaultSecurityContextClass);
return createSecurityContext(securityDomain, defaultFQN);
}
@@ -64,8 +91,8 @@
throw new IllegalArgumentException("securityDomain is null");
if(fqnClass == null)
throw new IllegalArgumentException("fqnClass is null");
- Class<SecurityContext> clazz = getContextClass(fqnClass);
- return createSecurityContext(securityDomain, clazz);
+ defaultSecurityContextClass = getContextClass(fqnClass);
+ return createSecurityContext(securityDomain, defaultSecurityContextClass);
}
@@ -134,10 +161,18 @@
*/
public static SecurityContextUtil createUtil(SecurityContext sc) throws Exception
{
- Class<SecurityContext> clazz = getContextClass(defaultUtilClass);
+ Class<? extends SecurityContextUtil> clazz = defaultUtilClass;
+
+ if(clazz == null)
+ {
+ clazz = (Class<? extends SecurityContextUtil>) loadClass(defaultUtilClassFQN);
+ defaultUtilClass = clazz;
+ }
+
//Get the CTR
- Constructor<SecurityContext> ctr = clazz.getConstructor(new Class[]{SecurityContext.class});
- return (SecurityContextUtil) ctr.newInstance(new Object[]{sc});
+ Constructor<?> ctr = clazz.getConstructor(new Class[]{SecurityContext.class});
+ Object obj = ctr.newInstance(new Object[]{sc});
+ return SecurityContextUtil.class.cast(obj);
}
/**
@@ -145,8 +180,7 @@
* @param sc SecurityContext
* @param utilFQN fqn of the util class
* @return
- */
- @SuppressWarnings("unchecked")
+ */
public static SecurityContextUtil createUtil(SecurityContext sc, String utilFQN) throws Exception
{
ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
@@ -171,7 +205,39 @@
return ctr.newInstance(new Object[]{sc});
}
- @SuppressWarnings("unchecked")
+ /**
+ * Set the default security context fqn
+ * @param fqn
+ */
+ public static void setDefaultSecurityContextFQN(String fqn)
+ {
+ defaultFQN = fqn;
+ defaultSecurityContextClass = null;
+ }
+
+
+ /**
+ * Set the default util class fqn
+ * @param fqn
+ */
+ public static void setDefaultSecurityContextUtilFQN(String fqn)
+ {
+ defaultUtilClassFQN = fqn;
+ defaultUtilClass = null; //reset
+ }
+
+ /**
+ * Load a class
+ * @param fqn
+ * @return
+ * @throws Exception
+ */
+ private static Class<?> loadClass(String fqn) throws Exception
+ {
+ ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
+ return tcl.loadClass(fqn);
+ }
+
private static Class<SecurityContext> getContextClass(String className) throws Exception
{
ClassLoader tcl = SecuritySPIActions.getContextClassLoader();
More information about the jboss-cvs-commits
mailing list