1、 CacheManagerAware接口;
Shiro 内部相应的组件(DefaultSecurityManager)会自动检测相应的对象(如Realm)是否实现了 CacheManagerAware 并自动注入相应的 CacheManager。
2、 Realm缓存;
Shiro 提供了 CachingRealm,其实现了 CacheManagerAware 接口,提供了缓存的一些基础实现;
AuthenticatingRealm 及 AuthorizingRealm 也分别提供了对AuthenticationInfo 和 AuthorizationInfo 信息的缓存。
在Spring的配置文件applicationContext.xml中配置Ehcache缓存
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="cacheManager" ref="cacheManager"/>
</bean>
<bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
<property name="cacheManagerConfigFile" value="classpath:ehcache.xml"/>
</bean>
添加ehcache.xml配置文件
<ehcache>
<!-- 磁盘上缓存的位置 -->
<diskStore path="java.io.tmpdir"/>
<!--
name:缓存名称
maxElementsInMemory 缓存最大数
eternal 缓存中对象是否为永久
overflowToDisk 内存不足时,是否启用磁盘缓存
timeToLiveSeconds 缓存数据的生存时间(单位秒)
timeToIdleSeconds 缓存对象空闲多久后删除(单位秒)
diskPersistent 是否在VM重启时存储硬盘的缓存数据
diskExpiryThreadIntervalSeconds 磁盘失效线程运行时间间隔
-->
<defaultCache
maxElementsInMemory="10000"
eternal="false"
overflowToDisk="false"
timeToIdleSeconds="300"
timeToLiveSeconds="300"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
/>
</ehcache>
完成以上配置,我们就可以在shiro环境中使用ehcache缓存了。