[jboss-cvs] JBossAS SVN: r96750 - projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Mon Nov 23 14:10:14 EST 2009
Author: sguilhen at redhat.com
Date: 2009-11-23 14:10:14 -0500 (Mon, 23 Nov 2009)
New Revision: 96750
Modified:
projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java
Log:
SECURITY-442: modules and control flags arrays are always cleared upon authorization completion
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 2009-11-23 19:07:40 UTC (rev 96749)
+++ projects/security/security-jboss-sx/branches/Branch_2_0/jbosssx/src/main/java/org/jboss/security/plugins/authorization/JBossAuthorizationContext.java 2009-11-23 19:10:14 UTC (rev 96750)
@@ -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();
}
More information about the jboss-cvs-commits
mailing list