Shiro提供了类似于Spring的Cache抽象,即Shiro本身不实现Cache,但是对Cache进行了又抽象,方便更换不同的底层Cache实现。
Shiro提供的Cache
接口:
Shiro提供的CacheManager
接口:
Shiro还提供了CacheManagerAware
用于注入CacheManager
:
Shiro内部相应的组件(DefaultSecurityManager
)会自动检测相应的对象(如Realm
,SessionManager
)是否实现了CacheManagerAware
并自动注入相应的CacheManager
。
Realm缓存
Shiro提供了CachingRealm
,其实现了CacheManagerAware
接口,提供了缓存的一些基础实现;
另外AuthenticatingRealm
及AuthorizingRealm
分别提供了对AuthenticationInfo
和AuthorizationInfo
信息的缓存。
|
|
userRealm.cachingEnabled
:启用缓存,默认false;userRealm.authenticationCachingEnabled
:启用身份验证缓存,即缓存AuthenticationInfo
信息,默认false;userRealm.authenticationCacheName
:缓存AuthenticationInfo
信息的缓存名称;userRealm.authorizationCachingEnabled
:启用授权缓存,即缓存AuthorizationInfo
信息,默认false;userRealm. authorizationCacheName
:缓存AuthorizationInfo
信息的缓存名称;
Session缓存
当我们设置了SecurityManager的CacheManager时,如:
如securityManager
实现了SessionsSecurityManager
,其会自动判断SessionManager
是否实现了CacheManagerAware
接口,如果实现了会把CacheManager
设置给它。
然后sessionManager
会判断相应的sessionDAO
(如继承自CachingSessionDAO
)是否实现了CacheManagerAware
,如果实现了会把CacheManager
设置给它;其会先查缓存,如果找不到才查数据库。