使用Shiro+Redis实现Session共享
1、POM依赖
<dependency>
<groupId>org.crazycake</groupId>
<artifactId>shiro-redis</artifactId>
<version>3.2.3</version>
</dependency>
2、ShiroConfig
添加四个Bean
@Bean
public RedisManager redisManager() {
// 它可对redis的ip、端口等进行配置
RedisManager redisManager = new RedisManager();
return redisManager;
}
@Bean
public SessionDAO sessionDAO() {
RedisSessionDAO redisSessionDAO = new RedisSessionDAO();
redisSessionDAO.setRedisManager(redisManager());
// session在redis中的保存时间,最好大于session会话超时时间
redisSessionDAO.setExpire(100);
return redisSessionDAO;
}
@Bean
public RedisCacheManager cacheManager() {
RedisCacheManager redisCacheManager = new RedisCacheManager();
redisCacheManager.setRedisManager(redisManager());
//redis中针对不同用户缓存
redisCacheManager.setPrincipalIdFieldName("id");
//用户权限信息缓存时间
redisCacheManager.setExpire(200);
return redisCacheManager;
}
@Bean
public SessionManager sessionManager() {
DefaultWebSessionManager sessionManager = new DefaultWebSessionManager();
sessionManager.setSessionDAO(sessionDAO());
sessionManager.setCacheManager(cacheManager());
// 局会话超时时间(单位毫秒),默认30分钟
sessionManager.setGlobalSessionTimeout(10000);
// 取消登录成功后url 后面的 JSESSIONID
sessionManager.setSessionIdUrlRewritingEnabled(false);
return sessionManager;
}
3、修改SecurityManager
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(userRealm());
securityManager.setSessionManager(sessionManager());
securityManager.setCacheManager(cacheManager());
return securityManager;
}
注意:
如果启动报错,User类要实现Serializable接口
浙公网安备 33010602011771号