Shiro支持大部分的缓存框架(Hazelcast, Ehcache, OSCache, Terracotta, Coherence, GigaSpaces, JBossCache),并提供重要接口:
1.CacheManager:私有的内存管理组件,返回Cache实例;
2.Cache:以键值对形式存储数据;
3.CacheManagerAware:自定义的缓存管理类需要实现这个接口。
如果为securityManager对象set一个cacheManager,则securityManager会为其管理的所有Relam实现CacheManagerAware接口(shiro.ini)。
securityManager.realms = $myRealm1, $myRealm2, ..., $myRealmN
...
cacheManager = my.implementation.of.CacheManager
...
securityManager.cacheManager = $cacheManager
# at this point, the securityManager and all CacheManagerAware
# realms have been set with the cacheManager instance
MemoryConstrainedCacheManager适用于单JVM的应用服务,会根据配置文件的设置在内存中自适应设置缓存大小(如果使用分布式的应用,需要设置分布式缓存。shiro.ini)
...
cacheManager = org.apache.shiro.cache.MemoryConstrainedCacheManager
...
securityManager.cacheManager = $cacheManager
AuthorizingRealm拥有clearCachedAuthorizationInfo方法用以清除缓存,保证用户在更改验证信息后,能够以新的信息来验证。