mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
Merged V3.0 to HEAD
12218: MT - fix ETHREEOH-992 12224: MT - fix ETHREEOH-1000 12230: Abstracted ThreadLocal usage for authentication stacks git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@12527 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -463,13 +463,20 @@ public abstract class AuthenticationUtil
|
||||
}
|
||||
}
|
||||
|
||||
private static ThreadLocal<Stack<Authentication>> threadLocalFullAuthenticationStack;
|
||||
private static ThreadLocal<Stack<Authentication>> threadLocalRunAsAuthenticationStack;
|
||||
static
|
||||
{
|
||||
threadLocalFullAuthenticationStack = new ThreadLocal<Stack<Authentication>>();
|
||||
threadLocalRunAsAuthenticationStack = new ThreadLocal<Stack<Authentication>>();
|
||||
}
|
||||
static class ThreadLocalStack extends ThreadLocal<Stack<Authentication>> {
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @see java.lang.ThreadLocal#initialValue()
|
||||
*/
|
||||
@Override
|
||||
protected Stack<Authentication> initialValue()
|
||||
{
|
||||
return new Stack<Authentication>();
|
||||
}
|
||||
|
||||
}
|
||||
private static ThreadLocal<Stack<Authentication>> threadLocalFullAuthenticationStack = new ThreadLocalStack();
|
||||
private static ThreadLocal<Stack<Authentication>> threadLocalRunAsAuthenticationStack = new ThreadLocalStack();
|
||||
|
||||
/**
|
||||
* Push the current authentication context onto a threadlocal stack.
|
||||
@@ -478,21 +485,8 @@ public abstract class AuthenticationUtil
|
||||
{
|
||||
Authentication originalFullAuthentication = AuthenticationUtil.getFullAuthentication();
|
||||
Authentication originalRunAsAuthentication = AuthenticationUtil.getRunAsAuthentication();
|
||||
|
||||
Stack<Authentication> fullAuthenticationStack = threadLocalFullAuthenticationStack.get();
|
||||
if (fullAuthenticationStack == null)
|
||||
{
|
||||
fullAuthenticationStack = new Stack<Authentication>();
|
||||
threadLocalFullAuthenticationStack.set(fullAuthenticationStack);
|
||||
}
|
||||
Stack<Authentication> runAsAuthenticationStack = threadLocalRunAsAuthenticationStack.get();
|
||||
if (runAsAuthenticationStack == null)
|
||||
{
|
||||
runAsAuthenticationStack = new Stack<Authentication>();
|
||||
threadLocalRunAsAuthenticationStack.set(runAsAuthenticationStack);
|
||||
}
|
||||
fullAuthenticationStack.push(originalFullAuthentication);
|
||||
runAsAuthenticationStack.push(originalRunAsAuthentication);
|
||||
threadLocalFullAuthenticationStack.get().push(originalFullAuthentication);
|
||||
threadLocalRunAsAuthenticationStack.get().push(originalRunAsAuthentication);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -500,21 +494,8 @@ public abstract class AuthenticationUtil
|
||||
*/
|
||||
public static void popAuthentication()
|
||||
{
|
||||
Stack<Authentication> fullAuthenticationStack = threadLocalFullAuthenticationStack.get();
|
||||
if (fullAuthenticationStack == null)
|
||||
{
|
||||
fullAuthenticationStack = new Stack<Authentication>();
|
||||
threadLocalFullAuthenticationStack.set(fullAuthenticationStack);
|
||||
}
|
||||
Stack<Authentication> runAsAuthenticationStack = threadLocalRunAsAuthenticationStack.get();
|
||||
if (runAsAuthenticationStack == null)
|
||||
{
|
||||
runAsAuthenticationStack = new Stack<Authentication>();
|
||||
threadLocalRunAsAuthenticationStack.set(runAsAuthenticationStack);
|
||||
}
|
||||
|
||||
Authentication originalFullAuthentication = fullAuthenticationStack.pop();
|
||||
Authentication originalRunAsAuthentication = runAsAuthenticationStack.pop();
|
||||
Authentication originalFullAuthentication = threadLocalFullAuthenticationStack.get().pop();
|
||||
Authentication originalRunAsAuthentication = threadLocalRunAsAuthenticationStack.get().pop();
|
||||
if (originalFullAuthentication == null)
|
||||
{
|
||||
AuthenticationUtil.clearCurrentSecurityContext();
|
||||
|
Reference in New Issue
Block a user