禁止多人使用同一账号在系统上进行操作[踢人操作]

本文介绍如何通过使用ConcurrentHashMap和自定义SessionListener实现同一账号在系统内保持唯一性的登录策略,确保在系统中同一账号不会同时在多个地方登录。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

 

   在开发中遇到一个问题,系统内,同一个账号可以在不同的地方多个人同时进行登陆,操作。

   要求是同一账号在系统内必须保持唯一,即,若是有人用同一账号登陆了,已登录账号失效
   
   解决方案有两种:
    一种是在系统中设置状态位,登陆签到,退出签退...至于异常退出,在旧的session销毁之前是无法再次进行登陆的,配置session的监听,在session销毁时,进行数据库操作,更改库里对应用户的状态位
    另一种思想:在服务器上维护一个map,以用户唯一标识为主键,值为session,登录时判断该用户是否已在,不在的话加入,已在的话将原session销毁,放入现有的session,这样的话前面登陆的人就不能再进行操作了。

下面实现后者,前者的话也是一样的


   实现:
使用java.util.concurrent.ConcurrentHashMap

ConcurrentHashMap 是 Doug Lea 的 util.concurrent 包的一部分,它提供比Hashtable 或者 synchronizedMap 更高程度的并发性。而且,对于大多数成功的 get() 操作它会设法避免完全锁定,其结果就是使得并发应用程序有着非常好的吞吐量。




至于异常的退出,只能等到会话超时了
此时必须设置监听会话超时时session销毁时附带进行的操作


web.xml中配置
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值