分布式架构单用户登录思路

分布式架构单用户登录思路

	所谓单用户登录即系统中关于本用户登录信息在服务端中只允许存在一份,不允许他人同时登录一个账号。

思路如下:

因为要考虑异常退出,非正常退出,所以我们采用redis服务器来存储相关信息或者采用mysql存储使用定时器(成本大,不推荐。)。本文只讲解redis实现思路

userId为key,用户信息和我们当前此次访问登录请求获得到的jsessionId(或者时间戳time值)为value进行缓存在redis服务器中,失效期为30分钟(在分布式系统中,关于jsessionid在该需求中不存在冲突问题,因为我们要的只是一个标识),相应的在浏览器端cookie中存储key为userInfo,value为userId和jsessionid的拼接, 关于获取jsessionid不可以从cookie的jsessionId(key)获取相应的value进行匹配,因为分布式架构中每个后台服务给我们的jsessionid是不同的。需要从我们自己设置的cookie中获取jsessionId
登录状态时-----
登录用户名密码正确之后,判断用户是否在redis中存在,
不存在(第一人称登录),存储redis中userId(key),用户信息和jsessionid(value),cookie中userId(key),userId+jsessionId(value)。
登录信息在redis已存在,判断jsessionid(时间戳)是否相同,不相同则提醒该用户,已在其他地方登录,要否强制登录,点击确定,根据其状态值再次访问该登录请求,将相应的jsessionid值更新到redis服务器中。
登录状态访问资源------
原终端访问资源的时候因为拦截器中cookie中userId为key,userId+jsessionId为value和redis中jsessionid为不匹配,则提示用户已在其他地方登录,请重新登录,继而跳转到登录界面。
相同则放行。------
登录成功 状态: 客户端存储的cookie中userInfo为key,userId和jsession(时间戳),redis服务器中存储userId为key,用户信息和jsession的值(或时间戳)为value。每次登录重新重置失效时间。
------时间戳设置同样的道理------------







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值