after invocation, restore pre-RunAs Authentication regardless of exception that may be thrown by method being intercepted

This commit is contained in:
Colin Sampaleanu 2004-04-21 21:09:39 +00:00
parent 302ae5a391
commit ab9e783f79

View File

@ -321,20 +321,23 @@ public abstract class AbstractSecurityInterceptor implements InitializingBean {
+ runAs.toString());
}
context.setAuthentication(runAs);
ContextHolder.setContext((Context) context);
SecureContext origSecureContext = null;
try {
origSecureContext = (SecureContext) ContextHolder.getContext();
context.setAuthentication(runAs);
ContextHolder.setContext((Context) context);
Object ret = callback.proceedWithObject(object);
if (logger.isDebugEnabled()) {
logger.debug("Reverting to original Authentication: "
+ authenticated.toString());
return callback.proceedWithObject(object);
}
finally {
if (logger.isDebugEnabled()) {
logger.debug("Reverting to original Authentication: "
+ authenticated.toString());
}
context.setAuthentication(authenticated);
ContextHolder.setContext((Context) context);
return ret;
origSecureContext.setAuthentication(authenticated);
ContextHolder.setContext(origSecureContext);
}
}
} else {
if (logger.isDebugEnabled()) {