[jboss-cvs] JBossAS SVN: r103483 - in projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins: authorization and 1 other directory.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Apr 2 13:53:30 EDT 2010


Author: anil.saldhana at jboss.com
Date: 2010-04-02 13:53:29 -0400 (Fri, 02 Apr 2010)
New Revision: 103483

Modified:
   projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java
   projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java
Log:
SECURITY-490: remove the lock in JBossAuthorizationManager authorize method and introduce a counter in JBossAuthorizatioNContext that takes care of number of authorizations in use and when the counter is 0, clears the modules and control flag lists

Modified: projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java
===================================================================
--- projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java	2010-04-02 15:56:13 UTC (rev 103482)
+++ projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/JBossAuthorizationManager.java	2010-04-02 17:53:29 UTC (rev 103483)
@@ -471,15 +471,7 @@
    {
       if(this.authorizationContext == null)
          this.setAuthorizationContext( new JBossAuthorizationContext(this.securityDomain) );
-      lock.lock();
-      try
-      {
-         return this.authorizationContext.authorize(resource, subject, role); 
-      } 
-      finally
-      {
-         lock.unlock();
-      }
+       return this.authorizationContext.authorize(resource, subject, role); 
    }
    
    /**

Modified: projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java
===================================================================
--- projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java	2010-04-02 15:56:13 UTC (rev 103482)
+++ projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java	2010-04-02 17:53:29 UTC (rev 103483)
@@ -24,6 +24,7 @@
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
+import java.util.List;
 import java.util.Map;
 
 import javax.security.auth.Subject;
@@ -136,6 +137,8 @@
       {
          try
          {
+            //Increase the counter of authorizations in use
+            JBossAuthorizationContextManagement.increase();
             this.authenticatedSubject = subject;
             initializeModules(resource, callerRoles);
          }
@@ -174,9 +177,8 @@
       }
       finally
       {
-         // clear the modules and control flags lists.
-         super.modules.clear();
-         super.controlFlags.clear();
+         //Decrease the counter of authorizations in use and if it reaches 0, clear the lists
+         JBossAuthorizationContextManagement.release(modules, controlFlags); 
       }
    }
 
@@ -373,4 +375,40 @@
          msg.append(e.getLocalizedMessage());
       return msg.toString();
    }
+    
+   /**
+    * <p>An internal static class that maintains a counter of authorizations in action.</p>
+    * <p>Once the counter reaches 0, it is safe to clear the authorization modules and control flags,
+    * to avoid the memory leaks.</p>
+    * @author anil 
+    */
+   private static class JBossAuthorizationContextManagement
+   {
+      private static Logger log = Logger.getLogger(JBossAuthorizationContextManagement.class);
+      private static boolean trace = log.isTraceEnabled();
+      
+      private static int userCount = 0;
+ 
+      public synchronized static void increase()
+      {
+         if(trace)
+            log.trace("Increasing the count by 1.Count Will be:" + ( userCount + 1) );
+         userCount++;
+      }
+      
+      @SuppressWarnings("unchecked")
+      public synchronized static void release(List  modules,  List controlFlags)
+      {
+         --userCount;
+         if(userCount == 0)
+         {
+            if(trace)
+               log.trace("Count is 0. Will be clearing the modules and control flags" );
+            
+            // clear the modules and control flags lists.
+            modules.clear();
+            controlFlags.clear(); 
+         }
+      }
+   }
 }
\ No newline at end of file




More information about the jboss-cvs-commits mailing list