[jboss-cvs] JBossAS SVN: r57533 - branches/JEE5_TCK/ejb3/src/main/org/jboss/ejb3/security

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Tue Oct 10 10:41:30 EDT 2006


Author: anil.saldhana at jboss.com
Date: 2006-10-10 10:41:29 -0400 (Tue, 10 Oct 2006)
New Revision: 57533

Modified:
   branches/JEE5_TCK/ejb3/src/main/org/jboss/ejb3/security/SecurityActions.java
Log:
EJBTHREE-735:Push the RunAsIdentity on the SecurityAssociation stack

Modified: branches/JEE5_TCK/ejb3/src/main/org/jboss/ejb3/security/SecurityActions.java
===================================================================
--- branches/JEE5_TCK/ejb3/src/main/org/jboss/ejb3/security/SecurityActions.java	2006-10-10 14:40:03 UTC (rev 57532)
+++ branches/JEE5_TCK/ejb3/src/main/org/jboss/ejb3/security/SecurityActions.java	2006-10-10 14:41:29 UTC (rev 57533)
@@ -29,6 +29,9 @@
 import javax.security.auth.Subject;
 import javax.security.jacc.PolicyContext;
 import javax.security.jacc.PolicyContextException;
+  
+import org.jboss.security.RunAsIdentity;
+import org.jboss.security.SecurityAssociation;
 
 
 /**
@@ -108,7 +111,77 @@
       Subject getContextSubject()
               throws PolicyContextException;
    }
+   
+   interface RunAsIdentityActions
+   {
+      RunAsIdentityActions PRIVILEGED = new RunAsIdentityActions()
+      {
+         private final PrivilegedAction peekAction = new PrivilegedAction()
+         {
+            public Object run()
+            {
+               return SecurityAssociation.peekRunAsIdentity();
+            }
+         };
 
+         private final PrivilegedAction popAction = new PrivilegedAction()
+         {
+            public Object run()
+            {
+               return SecurityAssociation.popRunAsIdentity();
+            }
+         };
+
+         public RunAsIdentity peek()
+         {
+            return (RunAsIdentity)AccessController.doPrivileged(peekAction);
+         }
+
+         public void push(final RunAsIdentity id)
+         {
+            AccessController.doPrivileged(
+               new PrivilegedAction()
+               {
+                  public Object run()
+                  {
+                     SecurityAssociation.pushRunAsIdentity(id);
+                     return null;
+                  }
+               }
+            );
+         }
+
+         public RunAsIdentity pop()
+         {
+            return (RunAsIdentity)AccessController.doPrivileged(popAction);
+         }
+      };
+
+      RunAsIdentityActions NON_PRIVILEGED = new RunAsIdentityActions()
+      {
+         public RunAsIdentity peek()
+         {
+            return SecurityAssociation.peekRunAsIdentity();
+         }
+
+         public void push(RunAsIdentity id)
+         {
+            SecurityAssociation.pushRunAsIdentity(id);
+         }
+
+         public RunAsIdentity pop()
+         {
+            return SecurityAssociation.popRunAsIdentity();
+         }
+      };
+
+      RunAsIdentity peek();
+
+      void push(RunAsIdentity id);
+
+      RunAsIdentity pop();
+   } 
+
    static Subject getContextSubject()
            throws PolicyContextException
    {
@@ -128,4 +201,28 @@
       String previousID = (String) AccessController.doPrivileged(action);
       return previousID;
    }
+   
+   static void pushRunAsIdentity(RunAsIdentity principal)
+   {
+      if(System.getSecurityManager() == null)
+      {
+         RunAsIdentityActions.NON_PRIVILEGED.push(principal);
+      }
+      else
+      {
+         RunAsIdentityActions.PRIVILEGED.push(principal);
+      }
+   }
+   
+   static RunAsIdentity popRunAsIdentity()
+   {
+      if(System.getSecurityManager() == null)
+      {
+         return RunAsIdentityActions.NON_PRIVILEGED.pop();
+      }
+      else
+      {
+         return RunAsIdentityActions.PRIVILEGED.pop();
+      }
+   }
 }




More information about the jboss-cvs-commits mailing list