[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