SecurityManager
对应 shiro来说 SecurityManager 非常重要,这里配置了
Realm
CacheManager
RememberMeManager
sessionManager
可以说是shiro的核心
我们今天就是要 配置 sessionManager 和 CacheManager
让 ecache和redis来缓存 session和 AuthorizationInfo的数据信息
使得应用能集群部署,多个机器之间共享session和 认证授权数据信息。
SecurityManager的配置
//配置核心安全事务管理器
@Bean
public SecurityManager securityManager(@Qualifier("authRealm")AuthRealm authRealm,@Qualifier("redisCacheManager")CacheManager
cacheManager) {
logger.info("--------------shiro已经加载----------------");
DefaultWebSecurityManager manager=new DefaultWebSecurityManager();
// 设置realm.
manager.setRealm(authRealm);
//注入缓存管理器;
//注意:开发时请先关闭,如不关闭热启动会报错
manager.setCacheManager(cacheManager);//这个如果执行多次,也是同样的一个对象;
//注入记住我管理器;
manager.setRememberMeManager(rememberMeManager());
return manager;
}
这里配置了
manager.setCacheManager(cacheManager)
CacheConfig 配置 ehCacheManager 和redisCacheManager
@Configuration
@EnableCaching
public class CacheConfig {
private Logger logger = org.slf4j.LoggerFactory.getLogger(getClass());
@Bean(name = "ehCacheManager")
public EhCacheManager ehCacheManager() {
logger.info("--------------ehCacheManager init---------------");
EhCacheManager cacheManager = new EhCacheManager();
cacheManager.setCacheManagerConfigFile("classpath:cache/ehcache-shiro.xml");
logger.info("--------------ehCacheManager init---------------"+cacheManager);
return cacheManager;
}
@Autowired
private RedisTemplate redisTemplate;
@Bean(name = "redisCacheManager")
@Primary
public RedisCacheManager redisCacheManager() {
logger.info("--------------redis cache init---------------");
RedisCacheManager cacheManager = new RedisCacheManager();
cacheManager.setRedisTemplate(redisTemplate);
logger.info("--------------redis cache ---------------"+cacheManager);
return cacheManager;
}
}
使用 ecache做缓存
1 、那么 加入依赖
<dependency>
<groupId>org.ehcache</groupId>
<artifactId>ehcache</artifactId>
<version>${ehcache.version}</version>
<scope>provided</scope>
</