shiro分布式session共享

使用Nginx+Tomcat进行负载均衡时,希望使用轮询方式进行负载。但是如果使用轮询方式的话,可能会访问不同的Tomcat,此时如果不进行Session共享,则相当于是一个新的Session。就比如现有系统都是需要认证登录的系统,如果没有Session共享,则会导致用户退出登录。

 

当我们使用了nginx做项目集群以后,就会出现一个很严重的问题,那就是:tomcat集群之间如何实现session共享的问题,如果这个问题不解决,就会出现登陆过后再次请求资源依旧需要登陆的问题。session共享有多种方案,主要说session存入redis,其实也挺简单的

shiro-redis.jar不会让你写任何代码,主要写配置文件就好,session怎么存入redis的根本不用写,刚开始没用shiro-redis这个jar,用的是自己的实现

实现方式:
 自己实现一个RedisSessionDao extends EnterpriseCacheSessionDAO
 重写了doCreate(),readSession(),doReadSession(),doUpdate(),doDelete()通过redis读写session的方法

反正挺麻烦的,还会报一些错,比如序列化和反序列化这些,后面看到shiro-redis就直接换了

添加依赖


     org.crazycake
     shiro-redis
     2.4.2.1-RELEASE


     redis.clients
     jedis
      2.7.2

shiro-redis.xml




	
	
	
	
	
	
	
	
		
		
		
		
		
	
	
	
	
		
		
		
		
		
	
	
	
	
		
		
		
		
	
	
	
	
		
		
	
	
	
		
		
	
	
	
	
		
	
	
	
	
		
		
		
	

	
	
		
		
		
		
		
		
		
		
		
			
				
				
			
		
		
		
			
				/login.jsp = anon
				/layui/** = anon
				/jquery/** = anon
				/images/** = anon
				/js/** = anon
				/assets/** = anon
				/verifyCode.do=anon
				
				
				/logout.do = logout
				
				/**=authc
			
		
	

redis.properties

#sessionId存入cookie名字
redisManager.sessionname=sid
#ip
redisManager.host=127.0.0.1
#端口
redisManager.port=6379
#redis key过期时间
redisManager.timeout=1800000
#存入redis key的前缀
redisManager.prefix=shiro_session_
#redis 密码
redisManager.password=root

配置好就可以了

session存入redis中

shiro分布式session共享_第1张图片

最后部署两个tomcat上,配置好nginx就OK

你可能感兴趣的:(shiro)