Shiro缓存可以用来临时缓存权限信息,这样就不用每一次权限信息认证的时候都去数据库查询,可以打打提高效率
1.ShiroConfig类中声明缓存管理器对象EhCacheManager
2.给DefaultWebSecurityManager安全管理器对象注入EhCacheManager
@Configuration//替代xml文件
public class ShiroConfiguration {
//缓存管理对象
@Bean
public EhCacheManager getEhCacheManager(){
EhCacheManager ehCacheManager = new EhCacheManager();
//配置缓存管理器对象
ehCacheManager.setCacheManagerConfigFile("classpath:ehcache.xml");
return ehCacheManager;
}
//设置安全管理器对象用于执行授权流程,并注入自定义的MyRealm,用于授权和认证
@Bean
public DefaultWebSecurityManager getDefaultWebSecurityManager(MyRealm myRealm){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myRealm);
//给安全管理器设置缓存管理器对象
securityManager.setCacheManager(getEhCacheManager());
return securityManager;
}
}
3.用xml文件配置缓存管理器对象
ehcache.xml
<?xml version="1.0" encoding="UTF-8"?>
<ehcache updateCheck="false" dynamicConfig="false">
<diskStore path="C:\TEMP" />
<cache name="users" timeToLiveSeconds="300" maxEntriesLocalHeap="1000"/>
<defaultCache name="defaultCache"
maxElementsInMemory="10000"
eternal="false"
timeToIdleSeconds="120"
timeToLiveSeconds="120"
overflowToDisk="false"
maxElementsOnDisk="100000"
diskPersistent="false"
diskExpiryThreadIntervalSeconds="120"
memoryStoreEvictionPolicy="LRU"/>
<!--缓存淘汰策略:当缓存空间比较紧张时,我们要存储新的数据进来,就必然要删除一些老的数据
LRU 最近最少使用
FIFO 先进先出
LFU 最少使用
-->
</ehcache>