[jboss-cvs] JBossAS SVN: r101560 - in projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src: main/java/org/jboss/security/plugins/authorization and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Feb 26 09:56:55 EST 2010


Author: jbertram at redhat.com
Date: 2010-02-26 09:56:55 -0500 (Fri, 26 Feb 2010)
New Revision: 101560

Modified:
   projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/main/java/org/jboss/security/plugins/JBossSecurityContext.java
   projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java
   projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/test/java/org/jboss/test/securitycontext/TestSecurityContext.java
Log:
JBPAPP-3811

Modified: projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/main/java/org/jboss/security/plugins/JBossSecurityContext.java
===================================================================
--- projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/main/java/org/jboss/security/plugins/JBossSecurityContext.java	2010-02-26 14:52:58 UTC (rev 101559)
+++ projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/main/java/org/jboss/security/plugins/JBossSecurityContext.java	2010-02-26 14:56:55 UTC (rev 101560)
@@ -65,6 +65,9 @@
    private static final RuntimePermission setSecurityManagementPermission
      = new RuntimePermission(JBossSecurityContext.class.getName() + ".setSecurityManagement");
    
+   private static final RuntimePermission setSecurityDomainPermission
+     = new RuntimePermission(JBossSecurityContext.class.getName() + ".setSecurityDomain");
+
    protected static final Logger log = Logger.getLogger(JBossSecurityContext.class); 
    protected boolean trace = log.isTraceEnabled();  
    
@@ -150,6 +153,20 @@
       return securityDomain;
    }
  
+   /*
+    * (non-Javadoc)
+    * @see org.jboss.security.SecurityContext#setSecurityDomain(java.lang.String)
+    */
+   public void setSecurityDomain(String domain)
+   {
+      SecurityManager manager = System.getSecurityManager();
+      if(manager != null)
+         manager.checkPermission(setSecurityDomainPermission);
+      
+      if (domain == null)
+         throw new IllegalArgumentException("Security domain cannot be null");
+      this.securityDomain = domain;
+   }
 
    /**
     * @see SecurityContext#getSubjectInfo()

Modified: projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java
===================================================================
--- projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java	2010-02-26 14:52:58 UTC (rev 101559)
+++ projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java	2010-02-26 14:56:55 UTC (rev 101560)
@@ -20,7 +20,7 @@
  * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
  */
 package org.jboss.security.plugins.authorization;
- 
+
 import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
@@ -67,33 +67,34 @@
 public class JBossAuthorizationContext extends AuthorizationContext
 {
    private static Logger log = Logger.getLogger(JBossAuthorizationContext.class);
-   private boolean trace = log.isTraceEnabled(); 
-   
+
+   private boolean trace = log.isTraceEnabled();
+
    private final String EJB = SecurityConstants.DEFAULT_EJB_APPLICATION_POLICY;
    private final String WEB = SecurityConstants.DEFAULT_WEB_APPLICATION_POLICY;
-   
+
    private Subject authenticatedSubject = null;
-    
+
    //Application Policy can be injected
-   private ApplicationPolicy applicationPolicy = null; 
-   
+   private ApplicationPolicy applicationPolicy = null;
+
    public JBossAuthorizationContext(String name)
    {
       this.securityDomainName = name;
    }
-   
+
    public JBossAuthorizationContext(String name, CallbackHandler handler)
    {
       this(name);
-      this.callbackHandler = handler; 
+      this.callbackHandler = handler;
    }
-   
+
    public JBossAuthorizationContext(String name, Subject subject, CallbackHandler handler)
    {
-      this(name,handler); 
-      this.authenticatedSubject = subject; 
+      this(name, handler);
+      this.authenticatedSubject = subject;
    }
-   
+
    /**
     * Inject an ApplicationPolicy that contains AuthorizationInfo
     * @param aPolicy
@@ -102,18 +103,17 @@
     */
    public void setApplicationPolicy(ApplicationPolicy aPolicy)
    {
-      if(aPolicy == null)
-         throw new IllegalArgumentException("Application Policy is null:domain="+this.securityDomainName);
+      if (aPolicy == null)
+         throw new IllegalArgumentException("Application Policy is null:domain=" + this.securityDomainName);
       AuthorizationInfo authzInfo = aPolicy.getAuthorizationInfo();
-      if( authzInfo == null)
+      if (authzInfo == null)
          throw new IllegalArgumentException("Application Policy has no AuthorizationInfo");
-      if(!authzInfo.getName().equals(securityDomainName))
+      if (!authzInfo.getName().equals(securityDomainName))
          throw new IllegalArgumentException("Application Policy ->AuthorizationInfo:" + authzInfo.getName()
-               + " does not match required domain name=" + this.securityDomainName); 
-      this.applicationPolicy = aPolicy; 
+               + " does not match required domain name=" + this.securityDomainName);
+      this.applicationPolicy = aPolicy;
    }
-    
-   
+
    /**
     * Authorize the Resource
     * @param resource
@@ -121,260 +121,255 @@
     * @throws AuthorizationException
     */
    public int authorize(final Resource resource) throws AuthorizationException
-   { 
-      return this.authorize(resource, this.authenticatedSubject, 
-            (RoleGroup)resource.getMap().get(ResourceKeys.SECURITY_CONTEXT_ROLES)); 
-  } 
-   
+   {
+      return this.authorize(resource, this.authenticatedSubject, (RoleGroup) resource.getMap().get(
+            ResourceKeys.SECURITY_CONTEXT_ROLES));
+   }
+
    /**
     * @see AuthorizationContext#authorize(Resource, Role)
     */
-   public int authorize(final Resource resource, 
-         final Subject subject, 
-         final RoleGroup callerRoles) throws AuthorizationException
-   {   
+   public int authorize(final Resource resource, final Subject subject, final RoleGroup callerRoles)
+         throws AuthorizationException
+   {
       try
       {
-         this.authenticatedSubject = subject;
-         initializeModules(resource, callerRoles);
-      }
-      catch (PrivilegedActionException e1)
-      {
-         throw new RuntimeException(e1);
-      } 
-      //Do a PrivilegedAction
-      try
-      {
-         AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() 
+         try
          {
-            public Object run() throws AuthorizationException 
+            this.authenticatedSubject = subject;
+            initializeModules(resource, callerRoles);
+         }
+         catch (PrivilegedActionException e1)
+         {
+            throw new RuntimeException(e1);
+         }
+         //Do a PrivilegedAction
+         try
+         {
+            AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
             {
-               int result = invokeAuthorize(resource);
-               if(result == PERMIT)
-                  invokeCommit();
-               if(result == DENY)
+               public Object run() throws AuthorizationException
                {
-                  invokeAbort();
-                  throw new AuthorizationException("Denied"); 
-               } 
-               return null;
-            }
-         });
+                  int result = invokeAuthorize(resource);
+                  if (result == PERMIT)
+                     invokeCommit();
+                  if (result == DENY)
+                  {
+                     invokeAbort();
+                     throw new AuthorizationException("Denied");
+                  }
+                  return null;
+               }
+            });
+         }
+         catch (PrivilegedActionException e)
+         {
+            Exception exc = e.getException();
+            if (trace)
+               log.trace("Error in authorize:", exc);
+            invokeAbort();
+            throw ((AuthorizationException) exc);
+         }
+         return PERMIT;
       }
-      catch (PrivilegedActionException e)
+      finally
       {
-         Exception exc = e.getException(); 
-         if(trace)
-           log.trace("Error in authorize:", exc); 
-         invokeAbort();
-         throw ((AuthorizationException)exc);
+         // clear the modules and control flags lists.
+         super.modules.clear();
+         super.controlFlags.clear();
       }
-      return PERMIT;
-      //return authorize(resource);
    }
-   
+
    //Private Methods  
    private void initializeModules(Resource resource, RoleGroup role) throws PrivilegedActionException
-   { 
-      AuthorizationInfo authzInfo = getAuthorizationInfo(securityDomainName, resource); 
-      if(authzInfo == null)
+   {
+      AuthorizationInfo authzInfo = getAuthorizationInfo(securityDomainName, resource);
+      if (authzInfo == null)
          throw new IllegalStateException("Authorization Info is null");
       AuthorizationModuleEntry[] entries = authzInfo.getAuthorizationModuleEntry();
       int len = entries != null ? entries.length : 0;
-      for(int i = 0 ; i < len; i++)
+      for (int i = 0; i < len; i++)
       {
          AuthorizationModuleEntry entry = entries[i];
          ControlFlag flag = entry.getControlFlag();
-         if(flag == null)
+         if (flag == null)
          {
-            if(trace)
-               log.trace("Null Control flag for entry:"+entry+". Defaults to REQUIRED!");
+            if (trace)
+               log.trace("Null Control flag for entry:" + entry + ". Defaults to REQUIRED!");
             flag = ControlFlag.REQUIRED;
          }
-         else
-            if(trace)
-               log.trace("Control flag for entry:"+entry+"is:["+flag+"]");
-            
-         this.controlFlags.add(flag);
-         modules.add(instantiateModule(entry.getPolicyModuleName(), entry.getOptions(), role)); 
+         else if (trace)
+            log.trace("Control flag for entry:" + entry + "is:[" + flag + "]");
+
+         super.controlFlags.add(flag);
+         super.modules.add(instantiateModule(entry.getPolicyModuleName(), entry.getOptions(), role));
       }
    }
-   
-   private int invokeAuthorize(Resource resource) 
-   throws AuthorizationException
+
+   private int invokeAuthorize(Resource resource) throws AuthorizationException
    {
       //Control Flag behavior
-      boolean encounteredRequiredError = false; 
-      boolean encounteredOptionalError = false; 
+      boolean encounteredRequiredError = false;
+      boolean encounteredOptionalError = false;
       AuthorizationException moduleException = null;
       int overallDecision = DENY;
-      
-      int length = modules.size();
-      for(int i = 0; i < length; i++)
+
+      int length = super.modules.size();
+      for (int i = 0; i < length; i++)
       {
-         AuthorizationModule module = (AuthorizationModule)modules.get(i);
-         ControlFlag flag = (ControlFlag)this.controlFlags.get(i); 
+         AuthorizationModule module = (AuthorizationModule) super.modules.get(i);
+         ControlFlag flag = (ControlFlag) super.controlFlags.get(i);
          int decision = DENY;
          try
          {
             decision = module.authorize(resource);
          }
-         catch(Exception ae)
-         { 
+         catch (Exception ae)
+         {
             decision = DENY;
-            if(moduleException == null)
+            if (moduleException == null)
                moduleException = new AuthorizationException(ae.getMessage());
          }
-         
-         if(decision == PERMIT)
-         { 
-            overallDecision =  PERMIT;
+
+         if (decision == PERMIT)
+         {
+            overallDecision = PERMIT;
             //SUFFICIENT case
-            if(flag == ControlFlag.SUFFICIENT && encounteredRequiredError == false)
+            if (flag == ControlFlag.SUFFICIENT && encounteredRequiredError == false)
                return PERMIT;
             continue; //Continue with the other modules
          }
          //Go through the failure cases 
          //REQUISITE case
-         if(flag == ControlFlag.REQUISITE)
+         if (flag == ControlFlag.REQUISITE)
          {
-            if(trace)
-               log.trace("REQUISITE failed for " + module); 
-            if(moduleException == null)
+            if (trace)
+               log.trace("REQUISITE failed for " + module);
+            if (moduleException == null)
                moduleException = new AuthorizationException("Authorization failed");
             else
                throw moduleException;
          }
          //REQUIRED Case
-         if(flag == ControlFlag.REQUIRED)
+         if (flag == ControlFlag.REQUIRED)
          {
-            if(trace)
+            if (trace)
                log.trace("REQUIRED failed for " + module);
-            if(encounteredRequiredError == false)
+            if (encounteredRequiredError == false)
                encounteredRequiredError = true;
          }
-         if(flag == ControlFlag.OPTIONAL)
-            encounteredOptionalError = true; 
+         if (flag == ControlFlag.OPTIONAL)
+            encounteredOptionalError = true;
       }
-      
+
       //All the authorization modules have been visited.
       String msg = getAdditionalErrorMessage(moduleException);
-      if(encounteredRequiredError)
-         throw new AuthorizationException("Authorization Failed:"+ msg);
-      if(overallDecision == DENY && encounteredOptionalError)
+      if (encounteredRequiredError)
          throw new AuthorizationException("Authorization Failed:" + msg);
-      if(overallDecision == DENY)
+      if (overallDecision == DENY && encounteredOptionalError)
+         throw new AuthorizationException("Authorization Failed:" + msg);
+      if (overallDecision == DENY)
          throw new AuthorizationException("Authorization Failed:Denied.");
       return PERMIT;
    }
-   
-   private void invokeCommit()
-   throws AuthorizationException
+
+   private void invokeCommit() throws AuthorizationException
    {
-      int length = modules.size();
-      for(int i = 0; i < length; i++)
+      int length = super.modules.size();
+      for (int i = 0; i < length; i++)
       {
-         AuthorizationModule module = (AuthorizationModule)modules.get(i); 
+         AuthorizationModule module = (AuthorizationModule) super.modules.get(i);
          boolean bool = module.commit();
-         if(!bool)
-            throw new AuthorizationException("commit on modules failed:"+module.getClass());
-      } 
-      modules.clear();
+         if (!bool)
+            throw new AuthorizationException("commit on modules failed:" + module.getClass());
+      }
    }
-   
-   private void invokeAbort()
-   throws AuthorizationException
+
+   private void invokeAbort() throws AuthorizationException
    {
-      int length = modules.size();
-      for(int i = 0; i < length; i++)
+      int length = super.modules.size();
+      for (int i = 0; i < length; i++)
       {
-         AuthorizationModule module = (AuthorizationModule)modules.get(i); 
-         boolean bool = module.abort(); 
-         if(!bool)
-            throw new AuthorizationException("abort on modules failed:"+module.getClass());
-      } 
-      modules.clear();
+         AuthorizationModule module = (AuthorizationModule) super.modules.get(i);
+         boolean bool = module.abort();
+         if (!bool)
+            throw new AuthorizationException("abort on modules failed:" + module.getClass());
+      }
    }
-   
-   private AuthorizationModule instantiateModule(String name, 
-         Map<String,Object> map, RoleGroup subjectRoles) 
-   throws PrivilegedActionException
+
+   private AuthorizationModule instantiateModule(String name, Map<String, Object> map, RoleGroup subjectRoles)
+         throws PrivilegedActionException
    {
       AuthorizationModule am = null;
       ClassLoader tcl = SecurityActions.getContextClassLoader();
       try
       {
          Class<?> clazz = tcl.loadClass(name);
-         am = (AuthorizationModule)clazz.newInstance();
+         am = (AuthorizationModule) clazz.newInstance();
       }
-      catch ( Exception e)
+      catch (Exception e)
       {
-         if(trace)
-            log.debug("Error instantiating AuthorizationModule:",e);
-      } 
-      if(am == null)
-         throw new IllegalStateException("AuthorizationModule has not " +
-               "been instantiated"); 
-      am.initialize(this.authenticatedSubject, this.callbackHandler, 
-            this.sharedState,map, subjectRoles); 
+         if (trace)
+            log.debug("Error instantiating AuthorizationModule:", e);
+      }
+      if (am == null)
+         throw new IllegalStateException("AuthorizationModule has not " + "been instantiated");
+      am.initialize(this.authenticatedSubject, this.callbackHandler, this.sharedState, map, subjectRoles);
       return am;
    }
-   
+
    private AuthorizationInfo getAuthorizationInfo(String domainName, Resource resource)
    {
       ResourceType layer = resource.getLayer();
-      
+
       //Check if an instance of ApplicationPolicy is available 
-      if(this.applicationPolicy != null)
+      if (this.applicationPolicy != null)
          return applicationPolicy.getAuthorizationInfo();
-       
-      ApplicationPolicy aPolicy = SecurityConfiguration.getApplicationPolicy(domainName); 
-      
-      if(aPolicy == null)
+
+      ApplicationPolicy aPolicy = SecurityConfiguration.getApplicationPolicy(domainName);
+
+      if (aPolicy == null)
       {
-         if(trace)
-            log.trace("Application Policy not obtained for domain="+ domainName +
-                         ". Trying to obtain the App policy for the default domain of the layer:" 
-                  + layer);
-         if(layer == ResourceType.EJB)
-            aPolicy = SecurityConfiguration.getApplicationPolicy(EJB); 
-         else
-            if(layer == ResourceType.WEB)
-               aPolicy = SecurityConfiguration.getApplicationPolicy(WEB); 
+         if (trace)
+            log.trace("Application Policy not obtained for domain=" + domainName
+                  + ". Trying to obtain the App policy for the default domain of the layer:" + layer);
+         if (layer == ResourceType.EJB)
+            aPolicy = SecurityConfiguration.getApplicationPolicy(EJB);
+         else if (layer == ResourceType.WEB)
+            aPolicy = SecurityConfiguration.getApplicationPolicy(WEB);
       }
-      if(aPolicy == null)
-         throw new IllegalStateException("Application Policy is null for domain:"+ domainName);
-      
+      if (aPolicy == null)
+         throw new IllegalStateException("Application Policy is null for domain:" + domainName);
+
       AuthorizationInfo ai = aPolicy.getAuthorizationInfo();
-      if(ai == null)
+      if (ai == null)
          return getAuthorizationInfo(layer);
-      else 
+      else
          return aPolicy.getAuthorizationInfo();
-   } 
-   
+   }
+
    private AuthorizationInfo getAuthorizationInfo(ResourceType layer)
    {
       AuthorizationInfo ai = null;
-      
-      if(layer == ResourceType.EJB)
+
+      if (layer == ResourceType.EJB)
          ai = SecurityConfiguration.getApplicationPolicy(EJB).getAuthorizationInfo();
+      else if (layer == ResourceType.WEB)
+         ai = SecurityConfiguration.getApplicationPolicy(WEB).getAuthorizationInfo();
       else
-         if(layer == ResourceType.WEB)
-            ai = SecurityConfiguration.getApplicationPolicy(WEB).getAuthorizationInfo();
-         else
-         {
-            if(log.isTraceEnabled())
-               log.trace("AuthorizationInfo not found. Providing default authorization info");
-            ai = new AuthorizationInfo(SecurityConstants.DEFAULT_APPLICATION_POLICY);
-            ai.add(new AuthorizationModuleEntry(DelegatingAuthorizationModule.class.getName()));
-         }
+      {
+         if (log.isTraceEnabled())
+            log.trace("AuthorizationInfo not found. Providing default authorization info");
+         ai = new AuthorizationInfo(SecurityConstants.DEFAULT_APPLICATION_POLICY);
+         ai.add(new AuthorizationModuleEntry(DelegatingAuthorizationModule.class.getName()));
+      }
       return ai;
    }
-   
+
    private String getAdditionalErrorMessage(Exception e)
    {
       StringBuilder msg = new StringBuilder(" ");
-      if(e != null)
+      if (e != null)
          msg.append(e.getLocalizedMessage());
       return msg.toString();
    }

Modified: projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/test/java/org/jboss/test/securitycontext/TestSecurityContext.java
===================================================================
--- projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/test/java/org/jboss/test/securitycontext/TestSecurityContext.java	2010-02-26 14:52:58 UTC (rev 101559)
+++ projects/security/security-jboss-sx/branches/2.0.4.SP1_SECURITY-442/jbosssx/src/test/java/org/jboss/test/securitycontext/TestSecurityContext.java	2010-02-26 14:56:55 UTC (rev 101560)
@@ -70,6 +70,10 @@
       return null;
    }
 
+   public void setSecurityDomain(String domain)
+   {
+   }
+   
    public SubjectInfo getSubjectInfo()
    {
       return null;




More information about the jboss-cvs-commits mailing list