SEC-3109: DelegatingSecurityContextExecutor fails with same Thread
Previously DelegatingSecurityContextRunnable and DelegatingSecurityContextCallable
would not setup the SecurityContext if it was on the same thread as it was created.
This was intended to fix SEC-3031 but simply caused more problems.
This commit changes the strategy to keep track of the previous SecurityContext
and restore it (or clear it out if it was originally empty).
@ -38,11 +36,18 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@@ -38,11 +36,18 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@ -57,8 +62,7 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@@ -57,8 +62,7 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
Assert.notNull(delegate,"delegate cannot be null");
Assert.notNull(securityContext,"securityContext cannot be null");
this.delegate=delegate;
this.securityContext=securityContext;
this.originalThread=Thread.currentThread();
this.delegateSecurityContext=securityContext;
}
/**
@ -71,33 +75,21 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@@ -71,33 +75,21 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@ -36,11 +34,17 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@@ -36,11 +34,17 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@ -55,8 +59,7 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@@ -55,8 +59,7 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
Assert.notNull(delegate,"delegate cannot be null");
Assert.notNull(securityContext,"securityContext cannot be null");
this.delegate=delegate;
this.securityContext=securityContext;
this.originalThread=Thread.currentThread();
this.delegateSecurityContext=securityContext;
}
/**
@ -69,33 +72,21 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@@ -69,33 +72,21 @@ public final class DelegatingSecurityContextRunnable implements Runnable {