Class DefaultSubjectDAO
java.lang.Object
org.apache.shiro.mgt.DefaultSubjectDAO
- All Implemented Interfaces:
SubjectDAO
Default
SubjectDAO implementation that stores Subject state in the Subject's Session by default (but this
can be disabled - see below). The Subject instance
can be re-created at a later time by first acquiring the associated Session (typically from a
SessionManager) via a session ID or session key and then
building a Subject instance from Session attributes.
Controlling how Sessions are used
Whether or not aSubject's Session is used or not to persist its own state is controlled on a
per-Subject basis as determined by the configured
sessionStorageEvaluator.
The default Evaluator is a DefaultSessionStorageEvaluator, which supports enabling or disabling
session usage for Subject persistence at a global level for all subjects (and defaults to allowing sessions to be
used).
Disabling Session Persistence Entirely
Because the defaultSessionStorageEvaluator instance is a DefaultSessionStorageEvaluator, you
can disable Session usage for Subject state entirely by configuring that instance directly, e.g.:
((DefaultSessionStorageEvaluator)sessionDAO.getSessionStorageEvaluator()).setSessionStorageEnabled(false);
or, for example, in shiro.ini:
securityManager.subjectDAO.sessionStorageEvaluator.sessionStorageEnabled = false
but note: ONLY do this your
application is 100% stateless and you DO NOT need subjects to be remembered across remote
invocations, or in a web environment across HTTP requests.
Supporting Both Stateful and Stateless Subject paradigms
Perhaps your application needs to support a hybrid approach of both stateful and stateless Subjects:- Stateful: Stateful subjects might represent web end-users that need their identity and authentication state to be remembered from page to page.
- Stateless: Stateless subjects might represent API clients (e.g. REST clients) that authenticate on every request, and therefore don't need authentication state to be stored across requests in a session.
SessionStorageEvaluator interface and configure it via the
setSessionStorageEvaluator(SessionStorageEvaluator) method, or, with shiro.ini:
myEvaluator = com.my.CustomSessionStorageEvaluator
securityManager.subjectDAO.sessionStorageEvaluator = $myEvaluator
Unless overridden, the default evaluator is a DefaultSessionStorageEvaluator, which enables session usage for
Subject state by default.- Since:
- 1.2
- See Also:
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidRemoves any existing subject state from the subject's session (if the session exists).Returns theSessionStorageEvaluatorthat will determine if aSubject's state may be persisted in the Subject's session.protected booleanisSessionStorageEnabled(Subject subject) Determines if the subject's session will be used to persist subject state or not.protected voidmergeAuthenticationState(Subject subject) Merges the Subject's current authentication state with whatever may be in any available session.protected voidmergePrincipals(Subject subject) Merges the Subject's currentSubject.getPrincipals()with whatever may be in any available session.protected voidremoveFromSession(Subject subject) Removes any existing subject state from the Subject's session (if the session exists).Saves the subject's state to the subject'ssessiononly ifsessionStorageEnabled(subject).protected voidsaveToSession(Subject subject) Saves the subject's state (it's principals and authentication state) to itssession.voidsetSessionStorageEvaluator(SessionStorageEvaluator sessionStorageEvaluator) Sets theSessionStorageEvaluatorthat will determine if aSubject's state may be persisted in the Subject's session.
-
Constructor Details
-
DefaultSubjectDAO
public DefaultSubjectDAO()
-
-
Method Details
-
isSessionStorageEnabled
Determines if the subject's session will be used to persist subject state or not. This implementation merely delegates to the internalSessionStorageEvaluator(aDefaultSessionStorageEvaluatorby default).- Parameters:
subject- the subject to inspect to determine if the subject's session will be used to persist subject state or not.- Returns:
trueif the subject's session will be used to persist subject state,falseotherwise.- See Also:
-
getSessionStorageEvaluator
Returns theSessionStorageEvaluatorthat will determine if aSubject's state may be persisted in the Subject's session. The default instance is aDefaultSessionStorageEvaluator.- Returns:
- the
SessionStorageEvaluatorthat will determine if aSubject's state may be persisted in the Subject's session. - See Also:
-
setSessionStorageEvaluator
Sets theSessionStorageEvaluatorthat will determine if aSubject's state may be persisted in the Subject's session. The default instance is aDefaultSessionStorageEvaluator.- Parameters:
sessionStorageEvaluator- theSessionStorageEvaluatorthat will determine if aSubject's state may be persisted in the Subject's session.- See Also:
-
save
Saves the subject's state to the subject'ssessiononly ifsessionStorageEnabled(subject). If session storage is not enabled for the specificSubject, this method does nothing. In either case, the argumentSubjectis returned directly (a new Subject instance is not created).- Specified by:
savein interfaceSubjectDAO- Parameters:
subject- the Subject instance for which its state will be created or updated.- Returns:
- the same
Subjectpassed in (a new Subject instance is not created).
-
saveToSession
Saves the subject's state (it's principals and authentication state) to itssession. The session can be retrieved at a later time (typically from aSessionManagerto be used to recreate theSubjectinstance.- Parameters:
subject- the subject for which state will be persisted to its session.
-
mergePrincipals
Merges the Subject's currentSubject.getPrincipals()with whatever may be in any available session. Only updates the Subject's session if the session does not match the current principals state.- Parameters:
subject- the Subject for which principals will potentially be merged into the Subject's session.
-
mergeAuthenticationState
Merges the Subject's current authentication state with whatever may be in any available session. Only updates the Subject's session if the session does not match the current authentication state.- Parameters:
subject- the Subject for which principals will potentially be merged into the Subject's session.
-
removeFromSession
Removes any existing subject state from the Subject's session (if the session exists). If the session does not exist, this method does not do anything.- Parameters:
subject- the subject for which any existing subject state will be removed from its session.
-
delete
Removes any existing subject state from the subject's session (if the session exists).- Specified by:
deletein interfaceSubjectDAO- Parameters:
subject- the Subject instance for which any persistent state should be deleted.
-