多点登录限制,禁止单用户多点在线


用户A已经在电脑1登录的情况下,当用户A在电脑2登录时,会把电脑1的登录信息挤掉并提醒已在其他地方登录。(类似于QQ)

本文章先说原理,实现是基于SSM框架的。

原理:
这里写图片描述

对于上图:重点是两个黑框的内容
1 为什么选择username作为key?是因为项目中的每个用户的username是唯一的,所以可以用。否则只能选择用户信息中唯一的字段作为key!

2 选择SessionID作为value是因为该值可以标记上线用户的信息,利用该值可以将实现 “将上线用户挤下线(清除Session中某个字段的值)”

3 假设场景看流程:
工具:
2个容器
//用来存储需要强制下线的sessionID
public static ArrayList LimitedSessionIds = new ArrayList<>();
//存储所有在线用户的信息
servletcontext

a 用户A在浏览器1(SessionIDA) 输入 userA ,passA 登录系统
b系统根据“userA”到servletcontext查找,没发现,所以0处理
c 系统将{“userA ”:“SessionIDA”}存到servletcontext
d 用户A在浏览器2(SessionIDB)输入 userA ,passA 登录系统
e 系统根据“userA”到servletcontext查找,发现已经存在(用户上 已经线了),所以系统在servletcontext中获取到SessionIDA,将SessionIDA放到容器LimitedSessionIds中,然后将servletcontext中的SessionIDA替换为SessionIDB
f 当用户A在浏览器1再次访问页面时,拦截器发现其SessionIDA存在于LimitedSessionIds,对其进行下线处理(清除Session中某个字段的值)
gg over

最后,贴上实现的核心代码(基于SSM的,换成SSH或其他的改变也不多):
1 Service层
这里写图片描述

2 封装处理过程的工具类
这里写图片描述

3 拦截器的核心部分
这里写图片描述


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值