SEC-3031: DelegatingSecurityContext(Runnable|Callable) only modify SecurityContext on new Thread
Modifying the SecurityContext on the same Thread can cause issues. For example, with a
RejectedExecutionHandler the SecurityContext may be cleared out on the original Thread.
This change modifies both the DelegatingSecurityContextRunnable and DelegatingSecurityContextCallable to,
by default, only modify the SecurityContext if they are invoked on a new Thread. The behavior can be changed
by setting the property enableOnOrigionalThread to true.
@ -32,6 +40,10 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@@ -32,6 +40,10 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@ -46,6 +58,7 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@@ -46,6 +58,7 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
Assert.notNull(securityContext,"securityContext cannot be null");
this.delegate=delegate;
this.securityContext=securityContext;
this.originalThread=Thread.currentThread();
}
/**
@ -58,7 +71,27 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@@ -58,7 +71,27 @@ public final class DelegatingSecurityContextCallable<V> implements Callable<V> {
@ -30,6 +38,10 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@@ -30,6 +38,10 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@ -44,6 +56,7 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@@ -44,6 +56,7 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
Assert.notNull(securityContext,"securityContext cannot be null");
this.delegate=delegate;
this.securityContext=securityContext;
this.originalThread=Thread.currentThread();
}
/**
@ -56,7 +69,27 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@@ -56,7 +69,27 @@ public final class DelegatingSecurityContextRunnable implements Runnable {
@ -321,7 +321,7 @@ public class SecurityContextHolderAwareRequestFilterTests {
@@ -321,7 +321,7 @@ public class SecurityContextHolderAwareRequestFilterTests {
@ -348,7 +348,7 @@ public class SecurityContextHolderAwareRequestFilterTests {
@@ -348,7 +348,7 @@ public class SecurityContextHolderAwareRequestFilterTests {
@ -375,7 +375,7 @@ public class SecurityContextHolderAwareRequestFilterTests {
@@ -375,7 +375,7 @@ public class SecurityContextHolderAwareRequestFilterTests {