本系列博文目录:https://my.oschina.net/u/3452433/blog/907396
本篇文章我们使用Ehcache作为Cache实现进行配置。
引入所需jar包
maven坐标
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.2.4</version>
</dependency>
shiro配置
shiro有两种缓存 Realm缓存 和 Session缓存
这里的写法是spring boot的shiro配置文件
/**
* 创建EhCache缓存类
* @return
*/
@Bean(name = "shiroCacheManager")
public EhCacheManager shiroCacheManager() {
EhCacheManager ehCacheManager = new EhCacheManager();
ehCacheManager.setCacheManagerConfigFile("classpath:shiro-ehcache.xml");//指定缓存配置文件路径
return ehCacheManager;
}
/**
* 创建安全认证资源类
* (自己实现的登陆和授权认证规则)
*/
@Bean(name = "shiroRealm")
public ShiroRealm shiroRealm(EhCacheManager shiroCacheManager) {
ShiroRealm realm = new ShiroRealm();
realm.setCacheManager(shiroCacheManager); //为资源类配置缓存
return realm;
}
/**
* 创建默认的安全管理类
* 整个安全认证流程的管理都由此类负责
*/
@Bean(name = "securityManager")
public DefaultWebSecurityManager securityManager(ShiroRealm shiroRealm,EhCacheManager shiroCacheManager) {
DefaultWebSecurityManager defaultWebSecurityManager = new DefaultWebSecurityManager(); //创建安全管理类
defaultWebSecurityManager.setRealm(shiroRealm); //指定资源类
defaultWebSecurityManager.setCacheManager(shiroCacheManager);//为管理类配置Session缓存
return defaultWebSecurityManager;
}
Ehcache配置
<?xml version="1.0" encoding="UTF-8"?>
<ehcache name="shiro-ehcache">
<!-- 缓存文件存放目录 -->
<!-- java.io.tmpdir代表操作系统默认的临时文件目录,不同操作系统路径不同 -->
<!-- windows 7 C:\Users\Administrator\AppData\Local\Temp -->
<!-- linux /tmp -->
<diskStore path="${java.io.tmpdir}/shiro/ehcache"/>
<!-- 设置缓存规则-->
<!--
maxElementsInMemory:缓存文件在内存上最大数目
maxElementsOnDisk:缓存文件在磁盘上的最大数目
eternal:缓存是否永不过期。true永不过期,false会过期
timeToIdleSeconds :缓存最大空闲时间,空闲超过此时间则过期(单位:秒)。当eternal为false时有效
timeToLiveSeconds :缓存最大的生存时间,从创建开始超过这个时间则过期(单位:秒)。当eternal为false时有效
overflowToDisk:如果内存中数据超过内存限制,是否缓存到磁盘上
diskPersistent:是否在磁盘上持久化缓存,系统重启后缓存依然存在
-->
<defaultCache
maxElementsInMemory="1000"
maxElementsOnDisk="10000"
eternal="false"
timeToIdleSeconds="300"
timeToLiveSeconds="600"
overflowToDisk="true"
diskPersistent="false"/>
</ehcache>