当咱们使用了nginx作项目集群之后,就会出现一个很严重的问题亟待解决,那就是:tomcat集群之间如何实现session共享的问题,若是这个问题不解决,就会出现登录事后再次请求资源依旧须要登录的问题。这篇文章咱们就解决这个问题。java
说明:本篇是在spring+shiro集成的基础上进行改进的,若是不知道spring和shiro怎么集成,请移步:spring集成shiro作登录认证nginx
1.在pom.xml中添加shiro-redis和jedis的依赖git
2.首先咱们须要对redis进行集成,在resources下新建config.propertiesgithub
3.在resources/spring文件夹下新建spring-redis.xml来集成redis操做客户端redis
4.添加redisClient.java做为访问redis的客户端spring
5.接着,咱们对spring-shiro.xml作以下修改(红色标记的部分)缓存
6.spring.xml作以下修改tomcat
到此咱们就完了shiro+redis实现session共享的问题,其实也很简单,其中的实现逻辑也很简单,就是shiro的拦截器会首先去redis里面获取session,做为当本次请求的session.session
其余代码以及简单测试代码再也不贴出,给出github地址:https://github.com/hafizzhang/shiro-session-cluster.gitide
经过本文,咱们就完成了spring+shiro+redis实现集群session共享的问题,通过亲测可行。但有一点遗憾的地方,就是每次请求至少会有8次redis的读操做,一次写操做,这个问题尚未找到很好的解决办法,本地使用ehcahe也不太现实,由于涉及到本地缓存和redis缓存同步的问题,若是你有好的办法,欢迎讨论交流学习!