Class CachingRealm
java.lang.Object
org.apache.shiro.realm.CachingRealm
- All Implemented Interfaces:
LogoutAware,org.apache.shiro.cache.CacheManagerAware,org.apache.shiro.lang.util.Nameable,Realm
- Direct Known Subclasses:
AuthenticatingRealm
public abstract class CachingRealm
extends Object
implements Realm, org.apache.shiro.lang.util.Nameable, org.apache.shiro.cache.CacheManagerAware, LogoutAware
A very basic abstract extension point for the
Realm interface that provides caching support for subclasses.
It also provides a convenience method,
getAvailablePrincipal(org.apache.shiro.subject.PrincipalCollection), which is useful across all
realm subclasses for obtaining a realm-specific principal/identity.
All actual Realm method implementations are left to subclasses.- Since:
- 0.9
- See Also:
-
Constructor Summary
ConstructorsConstructorDescriptionDefault no-argument constructor that defaultscachingEnabled(for general caching) totrueand sets a defaultnamebased on the class name. -
Method Summary
Modifier and TypeMethodDescriptionprotected voidTemplate method that may be implemented by subclasses should they wish to react to aCacheManagerinstance being set on the realm instance via thesetCacheManager(org.apache.shiro.cache.CacheManager)mutator.protected voidclearCache(PrincipalCollection principals) Clears out any cached data associated with the specified account identity/identities.protected voiddoClearCache(PrincipalCollection principals) This implementation does nothing - it is a template to be overridden by subclasses if necessary.protected ObjectgetAvailablePrincipal(PrincipalCollection principals) A utility method for subclasses that returns the first available principal of interest to this particular realm.org.apache.shiro.cache.CacheManagerReturns the CacheManager used for data caching to reduce EIS round trips, or null if caching is disabled.getName()Returns the (application-unique) name assigned to thisRealm.booleanvoidonLogout(PrincipalCollection principals) If caching is enabled, this will clear any cached data associated with the specified account identity.voidsetCacheManager(org.apache.shiro.cache.CacheManager cacheManager) Sets the CacheManager to be used for data caching to reduce EIS round trips.voidsetCachingEnabled(boolean cachingEnabled) Sets whether or not caching should be used if aCacheManagerhas beenconfigured.voidMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.shiro.realm.Realm
getAuthenticationInfo, supports
-
Constructor Details
-
CachingRealm
public CachingRealm()Default no-argument constructor that defaultscachingEnabled(for general caching) totrueand sets a defaultnamebased on the class name. Note that while in general, caching may be enabled by default, subclasses have control over if specific caching is enabled.
-
-
Method Details
-
getCacheManager
Returns the CacheManager used for data caching to reduce EIS round trips, or null if caching is disabled.- Returns:
- the CacheManager used for data caching to reduce EIS round trips, or null if caching is disabled.
-
setCacheManager
Sets the CacheManager to be used for data caching to reduce EIS round trips. This property is null by default, indicating that caching is turned off.- Specified by:
setCacheManagerin interfaceorg.apache.shiro.cache.CacheManagerAware- Parameters:
cacheManager- the CacheManager to use for data caching, or null to disable caching.
-
isCachingEnabled
Returnstrueif caching should be used if aCacheManagerhas beenconfigured,falseotherwise. The default value istruesince the large majority of Realms will benefit from caching if a CacheManager has been configured. However, memory-only realms should set this value tofalsesince they would manage account data in memory already lookups would already be as efficient as possible.- Returns:
trueif caching will be globally enabled if aCacheManagerhas been configured,falseotherwise
-
setCachingEnabled
Sets whether or not caching should be used if aCacheManagerhas beenconfigured.- Parameters:
cachingEnabled- whether or not to globally enable caching for this realm.
-
getName
Description copied from interface:RealmReturns the (application-unique) name assigned to thisRealm. All realms configured for a single application must have a unique name. -
setName
-
afterCacheManagerSet
Template method that may be implemented by subclasses should they wish to react to aCacheManagerinstance being set on the realm instance via thesetCacheManager(org.apache.shiro.cache.CacheManager)mutator. -
onLogout
If caching is enabled, this will clear any cached data associated with the specified account identity. Subclasses are free to override for additional behavior, but be sure to callsuper.onLogoutfirst. This default implementation merely callsclearCache(org.apache.shiro.subject.PrincipalCollection).- Specified by:
onLogoutin interfaceLogoutAware- Parameters:
principals- the application-specific Subject/user identifier that is logging out.- Since:
- 1.2
- See Also:
-
clearCache
Clears out any cached data associated with the specified account identity/identities. This implementation will return quietly if the principals argument is null or empty. Otherwise it delegates todoClearCache(org.apache.shiro.subject.PrincipalCollection).- Parameters:
principals- the principals of the account for which to clear any cached data.- Since:
- 1.2
-
doClearCache
This implementation does nothing - it is a template to be overridden by subclasses if necessary.- Parameters:
principals- principals the principals of the account for which to clear any cached data.- Since:
- 1.2
-
getAvailablePrincipal
A utility method for subclasses that returns the first available principal of interest to this particular realm. The heuristic used to acquire the principal is as follows:- Attempt to get this particular Realm's 'primary' principal in the
PrincipalCollectionvia aprincipals.call.fromRealm(getName()) - If the previous call does not result in any principals, attempt to get the overall 'primary' principal
from the PrincipalCollection via
PrincipalCollection.getPrimaryPrincipal(). - If there are no principals from that call (or the PrincipalCollection argument was null to begin with),
return
null
- Parameters:
principals- the PrincipalCollection holding all principals (from all realms) associated with a single Subject.- Returns:
- the 'primary' principal attributed to this particular realm, or the fallback 'master' principal if it
exists, or if not
null. - Since:
- 1.2
- Attempt to get this particular Realm's 'primary' principal in the
-