A
SubjectCallable associates a
Subject with a target/delegate
Callable to ensure proper
Subject thread-state management when the
Callable executes.
This ensures that any calls to
SecurityUtils.getSubject()
during the target
Callable's execution still work correctly even if the
Callable executes on a
different thread than the one that created it. This allows
Subject access during asynchronous operations.
When instances of this class execute (typically via a
ExecutorService),
the following occurs:
- The specified Subject any of its associated thread state is first bound to the thread that executes the
Callable.
- The delegate/target
Callable is executed
- The previous thread state that might have existed before the
Subject was bound is fully restored
This behavior ensures that the thread that executes this
Callable, which is often a different thread than
the one that created the instance, retains a
Subject to support
SecurityUtils.getSubject()
invocations. It also guarantees that the running thread remains 'clean' in any thread-pooled environments.
Usage
This is typically considered a support class and is not often directly referenced. Most people prefer to use
the
Subject.associateWith method, which will automatically return
an instance of this class.
An even more convenient alternative is to use a
SubjectAwareExecutorService, which
transparently uses instances of this class.