Spring Boot 集成 Apache Shiro 增加 Cache 的设置
- 上边我们说过如何进行 SpringBoot 集成 Apache Shiro
- Spring Boot 集成 Apache Shiro : https://blog.csdn.net/Roobert_Chao/article/details/89971828
- 在 pom.xml 文件中加入 缓存的 依赖。
<!--开启 cache 缓存-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<!-- ehcache 缓存 -->
<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache</artifactId>
</dependency>
<!-- shiro-ehcache-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-ehcache</artifactId>
<version>1.4.0</version>
</dependency>
- 配置管理 cache 的管理。
【EhcacheConfig 】
@Bean
public EhCacheManagerFactoryBean ehCacheManagerFactoryBean() {
EhCacheManagerFactoryBean cacheManagerFactoryBean = new EhCacheManagerFactoryBean();
cacheManagerFactoryBean.setShared(true); // 设置共享
return cacheManagerFactoryBean;
}
【在 ShiroConfig 做修改】
@Bean
public EhCacheManager ehCacheManager(){
EhCacheManager cacheManager = new EhCacheManager();
// cacheManager.setCacheManagerConfigFile("classpath:ehcache.xml");
cacheManager.setCacheManager(cacheManager);
return cacheManager;
}
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myShiroRealm());
securityManager.setCacheManager(ehCacheManager);
return securityManager;
}
@Bean
public MyShiroRealm myShiroRealm() {
MyShiroRealm myShiroRealm = new MyShiroRealm();
myShiroRealm.setCacheManager();
myShiroRealm.setCredentialsMatcher(credentialsMatcher()); // 设置密码的对比
return myShiroRealm;
}
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(userRealm());
securityManager.setCacheManager(ehCacheManager());
return securityManager;
}
- 修改 MyShiroRealm 类,添加 @Lazy 注解延迟注入 LoginService 中。
添加 @Lazy 注解,否则会导致该 LoginService 里的 @Cacheable 缓存注解、@Transactional 事务注解等失效。