public Object invoke(Invocation mi) throws Exception {
String securityDomain = SecurityConstants.DEFAULT_APPLICATION_POLICY;
if(securityManager != null)
{
securityDomain = securityManager.getSecurityDomain();
}
//Establish a security context if one is missing for Run-As push
if(SecurityActions.getSecurityContext() == null)
{
SecurityActions.createAndSetSecurityContext(mi.getPrincipal(),
mi.getCredential(), securityDomain);
}
/* If a run-as role was specified, push it so that any calls made
by this bean will have the runAsRole available for declarative
security checks.
*/
SecurityActions.pushRunAsIdentity(runAsIdentity);
SecurityActions.pushCallerRunAsIdentity(runAsIdentity);
try
{
Object returnValue = getNext().invoke(mi);
return returnValue;
}
finally
{
SecurityActions.popRunAsIdentity();
SecurityActions.popCallerRunAsIdentity();
}
}
|