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设置给它;其会先查缓存,如果找不到才查数据库。