tomcat集群时session共享问题

简单聊一下面对tomcat集群,咱们如何管理session。nginx

使用nginx

第一种方法比较简单,比较笨,就是将session进行广播,多个tomcat互相广播session,即用户在一个tomcat登录后,将这个tomcat保存的用户session信息,广播到其余tomcat里。这样子无论用户的请求分配给哪一个tomact,都存有用户的session信息。redis

缺点:这无疑增长了每一个tomact对内存的消耗。不可取。后端

 

第二种方法是,IP绑定。即nginx提供ip-hash功能,将固定的ip发起的请求始终分配给固定的tomcat来处理。那么这个tomcat就会存在该用户的session信息。tomcat

缺点:服务器

一、一大堆人连同一个网访问的时候,就没有负载均衡这一说了,这一大堆的ip都是同样,都去访问同一个tomcat。网络

二、若是这我的访问的tomcat忽然挂了,那nginx的故障转移机制将会分发给另外一个tomcat服务器,这样一来全部请求这个tomcat的全部用户就又须要从新登入了。session

三、若是这我的用着用着忽然在用的网络不稳定,而后这我的换了另外一个网,这样ip一换,这我的又要从新登入了。负载均衡

 

使用redis

tomcat-redis-session-manager

多个tomcat上的应用,配置了同一个redis服务器,来存储session信息。达到了共享session的做用。加密

 

使用jwt

放弃session机制,使用jwt机制。简单来讲就是userid+随机数+签名加密生成一个token,先后端通讯经过token来交互。客户端第一次请求登入以后,服务器端给客户端一个token,服务器将token做为key值,userid做为value值,30分钟做为有效时间存入redis中;客户端第二次访问controller以前进行拦截,判断是否有token,若是有token解密获取userid,而后取查询redis,token和userid是否匹配,若是匹配就容许访问controller,请求返回以后,服务器将从新生成新的token返回给客户端。简单来讲就是每次请求成功以后token都会改变,token存在redis中,这样一来至于redis分发到哪一个tomat并不影响,由于token是存在redis中的。spa

这种服务模式就是一种用户的无状态服务。所写接口,均不判断用户是否登陆,是否合法,只经过约定的秘钥来判断请求是否正确,只要正确,就提供返回结果。

相关文章
相关标签/搜索