[jboss-cvs] JBossAS SVN: r74811 - 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
Wed Jun 18 16:16:10 EDT 2008
Author: anil.saldhana at jboss.com
Date: 2008-06-18 16:16:10 -0400 (Wed, 18 Jun 2008)
New Revision: 74811
Modified:
projects/security/security-spi/trunk/spi/src/main/org/jboss/security/SecurityContextAssociation.java
Log:
SECURITY-246: make usage of threadlocal configurable
Modified: projects/security/security-spi/trunk/spi/src/main/org/jboss/security/SecurityContextAssociation.java
===================================================================
--- projects/security/security-spi/trunk/spi/src/main/org/jboss/security/SecurityContextAssociation.java 2008-06-18 20:15:46 UTC (rev 74810)
+++ projects/security/security-spi/trunk/spi/src/main/org/jboss/security/SecurityContextAssociation.java 2008-06-18 20:16:10 UTC (rev 74811)
@@ -21,6 +21,9 @@
*/
package org.jboss.security;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
import org.jboss.security.SecurityContext;
@@ -32,11 +35,39 @@
*/
public class SecurityContextAssociation
{
- private static InheritableThreadLocal<SecurityContext> securityContextLocal =
- new InheritableThreadLocal<SecurityContext>();
+ /**
+ * Flag to indicate whether threads that are spawned inherit the security context from parent
+ * Set this to false if you do not want inheritance. By default the context is inherited.
+ */
+ public static final String SECURITYCONTEXT_THREADLOCAL = "org.jboss.security.context.ThreadLocal";
+ /**
+ * In JBoss AS4, the SecurityAssociation inheritance is managed with a different system property
+ * This flag should be private and not visible.
+ */
+ private static final String SECURITYASSOCIATION_THREADLOCAL = "org.jboss.security.SecurityAssociation.ThreadLocal";
+
+ private static ThreadLocal<SecurityContext> securityContextLocal ;
+
+ static
+ {
+ String saflag = getSystemProperty(SECURITYASSOCIATION_THREADLOCAL, "false");
+ String scflag = getSystemProperty(SECURITYCONTEXT_THREADLOCAL, "false");
+
+ boolean useThreadLocal = Boolean.valueOf(saflag).booleanValue() || Boolean.valueOf(scflag).booleanValue();
+
+ if(useThreadLocal)
+ {
+ securityContextLocal = new ThreadLocal<SecurityContext>();
+ }
+ else
+ {
+ securityContextLocal = new InheritableThreadLocal<SecurityContext>();
+ }
+ }
+
public static void setSecurityContext(SecurityContext sc)
- {
+ {
securityContextLocal.set(sc);
}
@@ -49,4 +80,16 @@
{
securityContextLocal.set(null);
}
-}
+
+
+ private static String getSystemProperty(final String propertyName, final String defaultString)
+ {
+ return AccessController.doPrivileged(new PrivilegedAction<String>()
+ {
+ public String run()
+ {
+ return System.getProperty(propertyName, defaultString);
+ }
+ });
+ }
+}
\ No newline at end of file
More information about the jboss-cvs-commits
mailing list