public class SubjectAwareExecutor extends Object implements Executor
Executor implementation that will automatically first associate any argument
Runnable instances with the currently available Subject and then
dispatch the Subject-enabled runnable to an underlying delegate Executor
instance.
This is a simplification for applications that want to execute code as the currently
executing Subject on another thread, but don't want or need to call the
Subject.associateWith(Runnable) method and dispatch to a Thread manually. This
simplifies code and reduces Shiro dependencies across application source code.
Consider this code that could be repeated in many places across an application:
Instead, if theRunnableapplicationWork = //instantiate or acquire Runnable from somewhereSubjectsubject =SecurityUtils.getSubject();Runnablework = subject.associateWith(applicationWork);anExecutor.execute(work);
Executor instance used in application code is an instance of this class (which delegates
to the target Executor that you want), all places in code like the above reduce to this:
Notice there is no use of the Shiro API in the 2nd code block, encouraging the principle of loose coupling across your codebase.RunnableapplicationWork = //instantiate or acquire Runnable from somewhereanExecutor.execute(work);
SubjectAwareExecutorService| Constructor and Description |
|---|
SubjectAwareExecutor() |
SubjectAwareExecutor(Executor targetExecutor) |
| Modifier and Type | Method and Description |
|---|---|
protected Runnable |
associateWithSubject(Runnable r)
Utility method for subclasses to associate the argument
Runnable with the currently executing subject
and then return the associated Runnable. |
void |
execute(Runnable command)
Executes the specified runnable by first associating it with the currently executing
Subject and then
dispatches the associated Runnable to the underlying target Executor instance. |
protected Subject |
getSubject()
Returns the currently Subject instance that should be associated with Runnable or Callable instances before
being dispatched to the target
Executor instance. |
Executor |
getTargetExecutor()
Returns the target Executor instance that will actually execute the subject-associated Runnable instances.
|
void |
setTargetExecutor(Executor targetExecutor)
Sets target Executor instance that will actually execute the subject-associated Runnable instances.
|
public SubjectAwareExecutor()
public SubjectAwareExecutor(Executor targetExecutor)
public Executor getTargetExecutor()
public void setTargetExecutor(Executor targetExecutor)
targetExecutor - the target Executor instance that will actually execute the subject-associated Runnable
instances.protected Subject getSubject()
Executor instance. This implementation merely defaults to returning
SecurityUtils.getSubject().Executor instance.protected Runnable associateWithSubject(Runnable r)
Runnable with the currently executing subject
and then return the associated Runnable. The default implementation merely defaults to
Subject subject =getSubject(); return subject.associateWith(r);
r - the argument runnable to be associated with the current subjectCopyright © 2004-2016 The Apache Software Foundation. All Rights Reserved.