public final class DelegatingSecurityContextCallable<V> extends Object implements Callable<V>
Wraps a delegate Callable with logic for setting up a
SecurityContext before invoking the delegate Callable and
then removing the SecurityContext after the delegate has completed.
By default the SecurityContext is only setup if call() is
invoked on a separate Thread than the
DelegatingSecurityContextCallable was created on. This can be
overridden by setting setEnableOnOriginalThread(boolean) to true.
| Constructor and Description |
|---|
DelegatingSecurityContextCallable(Callable<V> delegate)
Creates a new
DelegatingSecurityContextCallable with the
SecurityContext from the SecurityContextHolder. |
DelegatingSecurityContextCallable(Callable<V> delegate,
SecurityContext securityContext)
Creates a new
DelegatingSecurityContextCallable with a specific
SecurityContext. |
| Modifier and Type | Method and Description |
|---|---|
V |
call() |
static <V> Callable<V> |
create(Callable<V> delegate,
SecurityContext securityContext)
Creates a
DelegatingSecurityContextCallable and with the given
Callable and SecurityContext, but if the securityContext is null
will defaults to the current SecurityContext on the
SecurityContextHolder |
void |
setEnableOnOriginalThread(boolean enableOnOriginalThread)
Determines if the SecurityContext should be transfered if
call()
is invoked on the same Thread the
DelegatingSecurityContextCallable was created on. |
String |
toString() |
public DelegatingSecurityContextCallable(Callable<V> delegate, SecurityContext securityContext)
DelegatingSecurityContextCallable with a specific
SecurityContext.delegate - the delegate DelegatingSecurityContextCallable to run with
the specified SecurityContext. Cannot be null.securityContext - the SecurityContext to establish for the delegate
Callable. Cannot be null.public DelegatingSecurityContextCallable(Callable<V> delegate)
DelegatingSecurityContextCallable with the
SecurityContext from the SecurityContextHolder.delegate - the delegate Callable to run under the current
SecurityContext. Cannot be null.public void setEnableOnOriginalThread(boolean enableOnOriginalThread)
call()
is invoked on the same Thread the
DelegatingSecurityContextCallable was created on.enableOnOriginalThread - if false (default), will only transfer the
SecurityContext if call() is invoked on a
different Thread than the
DelegatingSecurityContextCallable was created on.public static <V> Callable<V> create(Callable<V> delegate, SecurityContext securityContext)
DelegatingSecurityContextCallable and with the given
Callable and SecurityContext, but if the securityContext is null
will defaults to the current SecurityContext on the
SecurityContextHolderdelegate - the delegate DelegatingSecurityContextCallable to run with
the specified SecurityContext. Cannot be null.securityContext - the SecurityContext to establish for the delegate
Callable. If null, defaults to SecurityContextHolder.getContext()