7. Shiro缓存

CacheManagerAware接口

Shiro内部相应的组件(DefaultSecurityManager)会自动检测相应的对象(如Realm)是否实现了CacheManagerAware并自动注入相应的CacheManager,说白了就是这个对象可以使用缓存了。

Realm缓存

Shiro提供了CachingRealm,其实现了CacheManagerAware接口,提供了缓存的一些基础实现;AuthenticatingRealm及AuthorizingRealm也分别提供了对AuthenticationInfo和AuthorizationInfo信息的缓存。

所以Realm实际上是有缓存的,登录验证通过之后,第一次访问需要授权访问的页面是需要realm验证的,但是之后再访问这个页面就不需要再调用realm的授权方法处理,因为这个数据已经被缓存了。

Session缓存

如SecurityManager实现了SessionSecurityManager,其会判断SessionManager是否实现了CacheManagerAware接口,如果实现了会把CacheManager设置给它。

7. Shiro缓存_第1张图片

SessionManager也会判断相应的SessionDAO(如继承自CachingSessionDAO)是否实现了CacheManagerAware,如果实现了会把CacheManager设置给它。

设置了缓存的SessionManager,查询时先会查缓存,如果找不到才查数据库。

你可能感兴趣的:(7. Shiro缓存)