Package org.apache.shiro.mgt
Class DefaultSecurityManager
-
- All Implemented Interfaces:
Authenticator
,Authorizer
,org.apache.shiro.cache.CacheManagerAware
,org.apache.shiro.event.EventBusAware
,SecurityManager
,SessionManager
,org.apache.shiro.util.Destroyable
public class DefaultSecurityManager extends SessionsSecurityManager
The Shiro framework's default concrete implementation of theSecurityManager
interface, based around a collection ofRealm
s. This implementation delegates its authentication, authorization, and session operations to wrappedAuthenticator
,Authorizer
, andSessionManager
instances respectively via superclass implementation. To greatly reduce and simplify configuration, this implementation (and its superclasses) will create suitable defaults for all of its required dependencies, except the required one or moreRealm
s. BecauseRealm
implementations usually interact with an application's data model, they are almost always application specific; you will want to specify at least one customRealm
implementation that 'knows' about your application's data/security model (viaRealmSecurityManager.setRealm(org.apache.shiro.realm.Realm)
or one of the overloaded constructors). All other attributes in this class hierarchy will have suitable defaults for most enterprise applications. RememberMe notice: This class supports the ability to configure aRememberMeManager
forRememberMe
identity services for login/logout, BUT, a default instance will not be created for this attribute at startup. Because RememberMe services are inherently client tier-specific and therefore aplication-dependent, if you wantRememberMe
services enabled, you will have to specify an instance yourself via thesetRememberMeManager
mutator. However if you're reading this JavaDoc with the expectation of operating in a Web environment, take a look at theorg.apache.shiro.web.DefaultWebSecurityManager
implementation, which does supportRememberMe
services by default at startup.- Since:
- 0.2
-
-
Field Summary
Fields Modifier and Type Field Description protected RememberMeManager
rememberMeManager
protected SubjectDAO
subjectDAO
protected SubjectFactory
subjectFactory
-
Constructor Summary
Constructors Constructor Description DefaultSecurityManager()
Default no-arg constructor.DefaultSecurityManager(Collection<Realm> realms)
Supporting constructor for multiplerealms
.DefaultSecurityManager(Realm singleRealm)
Supporting constructor for a single-realm application.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected void
beforeLogout(Subject subject)
protected void
bind(Subject subject)
Deprecated.in favor ofsave(subject)
.protected SubjectContext
copy(SubjectContext subjectContext)
protected SessionContext
createSessionContext(SubjectContext subjectContext)
protected Subject
createSubject(AuthenticationToken token, AuthenticationInfo info, Subject existing)
Creates aSubject
instance for the user represented by the given method arguments.Subject
createSubject(SubjectContext subjectContext)
This implementation functions as follows:protected SubjectContext
createSubjectContext()
protected void
delete(Subject subject)
Removes (or 'unbinds') the Subject's state from the application, typically called duringlogout(org.apache.shiro.subject.Subject)
..protected Subject
doCreateSubject(SubjectContext context)
Actually creates aSubject
instance by delegating to the internalsubjectFactory
.protected SubjectContext
ensureSecurityManager(SubjectContext context)
Determines if there is aSecurityManager
instance in the context, and if not, adds 'this' to the context.protected PrincipalCollection
getRememberedIdentity(SubjectContext subjectContext)
RememberMeManager
getRememberMeManager()
protected SessionKey
getSessionKey(SubjectContext context)
SubjectDAO
getSubjectDAO()
Returns theSubjectDAO
responsible for persisting Subject state, typically used after login or when an Subject identity is discovered (eg after RememberMe services).SubjectFactory
getSubjectFactory()
Returns theSubjectFactory
responsible for creatingSubject
instances exposed to the application.Subject
login(Subject subject, AuthenticationToken token)
First authenticates theAuthenticationToken
argument, and if successful, constructs aSubject
instance representing the authenticated account's identity.void
logout(Subject subject)
Logs out the specified Subject from the system.protected void
onFailedLogin(AuthenticationToken token, AuthenticationException ae, Subject subject)
protected void
onSuccessfulLogin(AuthenticationToken token, AuthenticationInfo info, Subject subject)
protected void
rememberMeFailedLogin(AuthenticationToken token, AuthenticationException ex, Subject subject)
protected void
rememberMeLogout(Subject subject)
protected void
rememberMeSuccessfulLogin(AuthenticationToken token, AuthenticationInfo info, Subject subject)
protected Session
resolveContextSession(SubjectContext context)
protected SubjectContext
resolvePrincipals(SubjectContext context)
Attempts to resolve an identity (aPrincipalCollection
) for the context using heuristics.protected SubjectContext
resolveSession(SubjectContext context)
Attempts to resolve any associated session based on the context and returns a context that represents this resolvedSession
to ensure it may be referenced if necessary by the invokedSubjectFactory
that performs actualSubject
construction.protected void
save(Subject subject)
Saves the subject's state to a persistent location for future reference if necessary.void
setRememberMeManager(RememberMeManager rememberMeManager)
void
setSubjectDAO(SubjectDAO subjectDAO)
Sets theSubjectDAO
responsible for persisting Subject state, typically used after login or when an Subject identity is discovered (eg after RememberMe services).void
setSubjectFactory(SubjectFactory subjectFactory)
Sets theSubjectFactory
responsible for creatingSubject
instances exposed to the application.protected void
stopSession(Subject subject)
protected void
unbind(Subject subject)
Deprecated.in Shiro 1.2 in favor ofdelete(org.apache.shiro.subject.Subject)
-
Methods inherited from class org.apache.shiro.mgt.SessionsSecurityManager
afterCacheManagerSet, afterEventBusSet, afterSessionManagerSet, applyCacheManagerToSessionManager, applyEventBusToSessionManager, destroy, getSession, getSessionManager, setSessionManager, start
-
Methods inherited from class org.apache.shiro.mgt.AuthorizingSecurityManager
afterRealmsSet, checkPermission, checkPermission, checkPermissions, checkPermissions, checkRole, checkRoles, checkRoles, getAuthorizer, hasAllRoles, hasRole, hasRoles, isPermitted, isPermitted, isPermitted, isPermitted, isPermittedAll, isPermittedAll, setAuthorizer
-
Methods inherited from class org.apache.shiro.mgt.AuthenticatingSecurityManager
authenticate, getAuthenticator, setAuthenticator
-
Methods inherited from class org.apache.shiro.mgt.RealmSecurityManager
applyCacheManagerToRealms, applyEventBusToRealms, getRealms, setRealm, setRealms
-
Methods inherited from class org.apache.shiro.mgt.CachingSecurityManager
applyEventBusToCacheManager, getCacheManager, getEventBus, setCacheManager, setEventBus
-
-
-
-
Field Detail
-
rememberMeManager
protected RememberMeManager rememberMeManager
-
subjectDAO
protected SubjectDAO subjectDAO
-
subjectFactory
protected SubjectFactory subjectFactory
-
-
Constructor Detail
-
DefaultSecurityManager
public DefaultSecurityManager()
Default no-arg constructor.
-
DefaultSecurityManager
public DefaultSecurityManager(Realm singleRealm)
Supporting constructor for a single-realm application.- Parameters:
singleRealm
- the single realm used by this SecurityManager.
-
DefaultSecurityManager
public DefaultSecurityManager(Collection<Realm> realms)
Supporting constructor for multiplerealms
.- Parameters:
realms
- the realm instances backing this SecurityManager.
-
-
Method Detail
-
getSubjectFactory
public SubjectFactory getSubjectFactory()
Returns theSubjectFactory
responsible for creatingSubject
instances exposed to the application.- Returns:
- the
SubjectFactory
responsible for creatingSubject
instances exposed to the application.
-
setSubjectFactory
public void setSubjectFactory(SubjectFactory subjectFactory)
Sets theSubjectFactory
responsible for creatingSubject
instances exposed to the application.- Parameters:
subjectFactory
- theSubjectFactory
responsible for creatingSubject
instances exposed to the application.
-
getSubjectDAO
public SubjectDAO getSubjectDAO()
Returns theSubjectDAO
responsible for persisting Subject state, typically used after login or when an Subject identity is discovered (eg after RememberMe services). Unless configured otherwise, the default implementation is aDefaultSubjectDAO
.- Returns:
- the
SubjectDAO
responsible for persisting Subject state, typically used after login or when an Subject identity is discovered (eg after RememberMe services). - Since:
- 1.2
- See Also:
DefaultSubjectDAO
-
setSubjectDAO
public void setSubjectDAO(SubjectDAO subjectDAO)
Sets theSubjectDAO
responsible for persisting Subject state, typically used after login or when an Subject identity is discovered (eg after RememberMe services). Unless configured otherwise, the default implementation is aDefaultSubjectDAO
.- Parameters:
subjectDAO
- theSubjectDAO
responsible for persisting Subject state, typically used after login or when an Subject identity is discovered (eg after RememberMe services).- Since:
- 1.2
- See Also:
DefaultSubjectDAO
-
getRememberMeManager
public RememberMeManager getRememberMeManager()
-
setRememberMeManager
public void setRememberMeManager(RememberMeManager rememberMeManager)
-
createSubjectContext
protected SubjectContext createSubjectContext()
-
createSubject
protected Subject createSubject(AuthenticationToken token, AuthenticationInfo info, Subject existing)
Creates aSubject
instance for the user represented by the given method arguments.- Parameters:
token
- theAuthenticationToken
submitted for the successful authentication.info
- theAuthenticationInfo
of a newly authenticated user.existing
- the existingSubject
instance that initiated the authentication attempt- Returns:
- the
Subject
instance that represents the context and session data for the newly authenticated subject.
-
bind
@Deprecated protected void bind(Subject subject)
Deprecated.in favor ofsave(subject)
.Binds aSubject
instance created after authentication to the application for later use. As of Shiro 1.2, this method has been deprecated in favor ofsave(org.apache.shiro.subject.Subject)
, which this implementation now calls.- Parameters:
subject
- theSubject
instance created after authentication to be bound to the application for later use.- See Also:
save(org.apache.shiro.subject.Subject)
-
rememberMeSuccessfulLogin
protected void rememberMeSuccessfulLogin(AuthenticationToken token, AuthenticationInfo info, Subject subject)
-
rememberMeFailedLogin
protected void rememberMeFailedLogin(AuthenticationToken token, AuthenticationException ex, Subject subject)
-
rememberMeLogout
protected void rememberMeLogout(Subject subject)
-
login
public Subject login(Subject subject, AuthenticationToken token) throws AuthenticationException
First authenticates theAuthenticationToken
argument, and if successful, constructs aSubject
instance representing the authenticated account's identity. Once constructed, theSubject
instance is thenbound
to the application for subsequent access before being returned to the caller.- Parameters:
token
- the authenticationToken to process for the login attempt.subject
- the subject against which the authentication attempt will occur- Returns:
- a Subject representing the authenticated user.
- Throws:
AuthenticationException
- if there is a problem authenticating the specifiedtoken
.
-
onSuccessfulLogin
protected void onSuccessfulLogin(AuthenticationToken token, AuthenticationInfo info, Subject subject)
-
onFailedLogin
protected void onFailedLogin(AuthenticationToken token, AuthenticationException ae, Subject subject)
-
beforeLogout
protected void beforeLogout(Subject subject)
-
copy
protected SubjectContext copy(SubjectContext subjectContext)
-
createSubject
public Subject createSubject(SubjectContext subjectContext)
This implementation functions as follows:- Ensures the
SubjectContext
is as populated as it can be, using heuristics to acquire data that may not have already been available to it (such as a referenced session or remembered principals). - Calls
doCreateSubject(org.apache.shiro.subject.SubjectContext)
to actually perform theSubject
instance creation. - calls
save(subject)
to ensure the constructedSubject
's state is accessible for future requests/invocations if necessary. - returns the constructed
Subject
instance.
- Parameters:
subjectContext
- any data needed to direct how the Subject should be constructed.- Returns:
- the
Subject
instance reflecting the specified contextual data. - Since:
- 1.0
- See Also:
ensureSecurityManager(org.apache.shiro.subject.SubjectContext)
,resolveSession(org.apache.shiro.subject.SubjectContext)
,resolvePrincipals(org.apache.shiro.subject.SubjectContext)
,doCreateSubject(org.apache.shiro.subject.SubjectContext)
,save(org.apache.shiro.subject.Subject)
- Ensures the
-
doCreateSubject
protected Subject doCreateSubject(SubjectContext context)
Actually creates aSubject
instance by delegating to the internalsubjectFactory
. By the time this method is invoked, all possibleSubjectContext
data (session, principals, et. al.) has been made accessible using all known heuristics and will be accessible to thesubjectFactory
via thesubjectContext.resolve*
methods.- Parameters:
context
- the populated context (data map) to be used by theSubjectFactory
when creating aSubject
instance.- Returns:
- a
Subject
instance reflecting the data in the specifiedSubjectContext
data map. - Since:
- 1.2
- See Also:
getSubjectFactory()
,SubjectFactory.createSubject(org.apache.shiro.subject.SubjectContext)
-
save
protected void save(Subject subject)
Saves the subject's state to a persistent location for future reference if necessary. This implementation merely delegates to the internalsubjectDAO
and callssubjectDAO.save(subject)
.- Parameters:
subject
- the subject for which state will potentially be persisted- Since:
- 1.2
- See Also:
SubjectDAO.save(org.apache.shiro.subject.Subject)
-
delete
protected void delete(Subject subject)
Removes (or 'unbinds') the Subject's state from the application, typically called duringlogout(org.apache.shiro.subject.Subject)
.. This implementation merely delegates to the internalsubjectDAO
and callsdelete(subject)
.- Parameters:
subject
- the subject for which state will be removed- Since:
- 1.2
- See Also:
SubjectDAO.delete(org.apache.shiro.subject.Subject)
-
ensureSecurityManager
protected SubjectContext ensureSecurityManager(SubjectContext context)
Determines if there is aSecurityManager
instance in the context, and if not, adds 'this' to the context. This ensures the SubjectFactory instance will have access to a SecurityManager during Subject construction if necessary.- Parameters:
context
- the subject context data that may contain a SecurityManager instance.- Returns:
- The SubjectContext to use to pass to a
SubjectFactory
for subject creation. - Since:
- 1.0
-
resolveSession
protected SubjectContext resolveSession(SubjectContext context)
Attempts to resolve any associated session based on the context and returns a context that represents this resolvedSession
to ensure it may be referenced if necessary by the invokedSubjectFactory
that performs actualSubject
construction. If there is aSession
already in the context because that is what the caller wants to be used forSubject
construction, or if no session is resolved, this method effectively does nothing returns the context method argument unaltered.- Parameters:
context
- the subject context data that may resolve a Session instance.- Returns:
- The context to use to pass to a
SubjectFactory
for subject creation. - Since:
- 1.0
-
resolveContextSession
protected Session resolveContextSession(SubjectContext context) throws InvalidSessionException
- Throws:
InvalidSessionException
-
getSessionKey
protected SessionKey getSessionKey(SubjectContext context)
-
resolvePrincipals
protected SubjectContext resolvePrincipals(SubjectContext context)
Attempts to resolve an identity (aPrincipalCollection
) for the context using heuristics. This implementation functions as follows:- Check the context to see if it can already
resolve an identity
. If so, this method does nothing and returns the method argument unaltered. - Check for a RememberMe identity by calling
getRememberedIdentity(org.apache.shiro.subject.SubjectContext)
. If that method returns a non-null value, place the rememberedPrincipalCollection
in the context.
- Parameters:
context
- the subject context data that may provide (directly or indirectly through one of its values) aPrincipalCollection
identity.- Returns:
- The Subject context to use to pass to a
SubjectFactory
for subject creation. - Since:
- 1.0
- Check the context to see if it can already
-
createSessionContext
protected SessionContext createSessionContext(SubjectContext subjectContext)
-
logout
public void logout(Subject subject)
Description copied from interface:SecurityManager
Logs out the specified Subject from the system. Note that most application developers should not call this method unless they have a good reason for doing so. The preferred way to logout a Subject is to call
, not theSubject.logout()
SecurityManager
directly. Framework developers on the other hand might find calling this method directly useful in certain cases.- Parameters:
subject
- the subject to log out.
-
stopSession
protected void stopSession(Subject subject)
-
unbind
@Deprecated protected void unbind(Subject subject)
Deprecated.in Shiro 1.2 in favor ofdelete(org.apache.shiro.subject.Subject)
Unbinds or removes the Subject's state from the application, typically called duringlogout(org.apache.shiro.subject.Subject)
. This has been deprecated in Shiro 1.2 in favor of thedelete
method. The implementation has been updated to invoke that method.- Parameters:
subject
- the subject to unbind from the application as it will no longer be used.
-
getRememberedIdentity
protected PrincipalCollection getRememberedIdentity(SubjectContext subjectContext)
-
-