CacheManagerAware接口
Shiro内部相应的组件(DefaultSecurityManager)会自动检测相应的对象(如Realm)是否实现了CacheManagerAware并自动注入相应的CacheManager,说白了就是这个对象可以使用缓存了。
Realm缓存
Shiro提供了CachingRealm,其实现了CacheManagerAware接口,提供了缓存的一些基础实现;AuthenticatingRealm及AuthorizingRealm也分别提供了对AuthenticationInfo和AuthorizationInfo信息的缓存。
所以Realm实际上是有缓存的,登录验证通过之后,第一次访问需要授权访问的页面是需要realm验证的,但是之后再访问这个页面就不需要再调用realm的授权方法处理,因为这个数据已经被缓存了。
Session缓存
如SecurityManager实现了SessionSecurityManager,其会判断SessionManager是否实现了CacheManagerAware接口,如果实现了会把CacheManager设置给它。
SessionManager也会判断相应的SessionDAO(如继承自CachingSessionDAO)是否实现了CacheManagerAware,如果实现了会把CacheManager设置给它。
设置了缓存的SessionManager,查询时先会查缓存,如果找不到才查数据库。
网友评论