tomcat集群时session共享问题

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

使用nginx

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

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

 

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

缺点:

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

2、如果这个人访问的tomcat突然挂了,那nginx的故障转移机制将会分发给另一个tomcat服务器,这样一来所有请求这个tomcat的所有用户就又需要重新登入了。

3、如果这个人用着用着突然在用的网络不稳定,然后这个人换了另一个网,这样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中的。

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

 

转载于:https://my.oschina.net/xiaoyoung/blog/3016527

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值