`
sha851092391
  • 浏览: 72564 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

实现限制用户在不同地点重复登录账号

    博客分类:
  • Java
阅读更多
    有些情况下你也许会由这样的一个需求,就是限制同一个账号在不同地点上面重复登录,就像QQ一样,一个账号只能一个人登录,别人登录你的账号的话,那你这边就会提示“已在别处登录”并强制登出。
    其实实现起来不是很麻烦,在这里给出我自己的做法,如果有更好地方法可以在这里跟大家分享一下。
    在用户登录的时候把用户放在Session中的同时,在ServletContext也维护这一个Map<用户名,SessionID>(也可以用DB来实现),在该Map里面也同时添加一条记录;实现一个Filter(或这是用拦截器)来对用户进行访问验证,如果第二个人在另外一个地点是用同一个用户名登录的话,那么Map中用户名所对应的Value就会发生变化,当以一个人再对资源进行访问的话,那么到Filter那关发现,用户名所对应的SessionID已经改变了,那么就提示第一个用户这个用户名已在别处登录。
    清理ServletContext维护的Map的做法,在用户登录的时候,把一个实现HttpSessionBindingListener的监听器Set进去,HttpSessionBindingListener接口中有两个方法valueBound和valueUnbound,在valueBound方法中实现的是对Map属性的添加记录,在valueUnbound方法里面实现的是对Map里面的属性进行删除操作;在用户登出操作的时候可以销毁Session。
//在把该类的对象set进session的时候,会自动调用
public void valueBound(HttpSessionBindingEvent event){
    HttpSession session = event.getSession();
    ServletContext application = session.getServletContext();
    //判断维护的Map是否存在,不存在就new
    //...
    Map<String, String> userList = ...;
    userList.put(session.getAttribute("USER_KEY",session.getId()));
}

//该方法被调用的情况:
//手动调用invalidate方法时回调
//session过期时回调
//session.removeAttribute()时回调
//session.setAttribute("set进去的key","其他对象")
public void valueUnbound(HttpSessionBindingEvent event){
    //取出ServletContext的Map
    //取出Map中当前用户多对应的sessionId,判断当前Session的ID和Map中的SessionId是否一致,true代表该用户正常退出,false代表强制退出
    //正常退出直接remove掉Map对应的值,否则什么事情都不做。
}
0
4
分享到:
评论

相关推荐

    Java 多用户登录限制的实现方法

    最近没有事情做,闲的发呆,于是写个东东练练手。这篇文章主要介绍了Java 多用户登录限制的实现方法的相关资料,需要的朋友可以参考下

    C#两个账号同时登录,后登录的账号将前一个账号挤掉

    C#两个账号同时登录,后登录的账号将前一个账号挤掉C#两个账号同时登录,后登录的账号将前一个账号挤掉

    jsp中限制用户多次登录或者同时在线

    有些情况下你也许会由这样的一个需求,就是限制同一个账号在不同地点上面重复登录,就像QQ一样,一个账号只能一个人登录,别人登录你的账号的话,那你这边就会提示“已在别处登录”并强制登出。 其实实现起来不是很...

    Python简单实现一个可以注册、登录、登出的系统

    设计一个拥有注册、登录、退出功能的小程序。 一、接口提供方 (1)使用面向对象思想,将方法封装到某个类中。 (2)创建一个独立的包、模块存放这个类。...(2)主程序一直在循环运行,等待用户输入。

    ssm+shiro+redis 登录控制及重试次数超过5次账号锁定一分钟

    shiro+redis 实现登录控制及密码重试次数超过5次后账号锁定一分钟不能登录

    Asp.net中实现同一用户名不能同时登陆

    Web项目中经常遇到的问题就是同一用户名多次登陆...本文介绍的方法是采用类似于MSN登陆的方法,第二次登陆时会把第一次的登陆注销掉,第一次登陆将会类似于MSN弹出:您的帐号已在别处被登陆,您被强迫下线的提示信息。

    防止同一用户同时登陆

    防止同一用户同时登陆 防止同一用户同时登陆

    javaweb登录模块 , 双token + redis(防止多设备登录)

    设备A登陆后生成的token保存到redis中,如果设备B登陆同一个账号,则将设备A在redis存储的token清除。 用户修改密码,实现重新登陆 用户修改密码后删除存储在redis的token,重新登陆获取新的token 2、如果refresh_...

    v1.6.0 200624 beta.rar

    采用Client/Server架构,可以同时连接5个用户,每个用户最多可以拥有20个好友,最多可以加10个群聊,文件传输的限制字节为4096,缓存机制消息最大为50,在这些限制之内可以实现如下功能: - 注册(用户名不重复)...

    Mulogin多登防关联浏览器

    MuLogin多登防关联浏览器,批量管理多个平台多个帐号MuLogin...支持多用户协作使用,高效工作团队合作子账号,可将配置文件指纹分享给团队,方便多人协作,免密登陆。 支持主流代理IP自由配置支持自配代理IP不关联。

    桃源企业文件管理系统 v3.3.zip

    1、文件及目录操作:前台用户登录后可实现类似windows资源管理器的目录创建、删除和移动,文件上传、下载及文件列表查看,图片预览及多媒体文件在线播放(需安装多媒体播放器),文件剪切、复制、粘贴、改名、删除、...

    彩印包装印刷行业软件源码 ColorPrintingPackagingPrinting.rar

    4.1登录界面:登陆:该系统根据用户的身份实现了不同的功能,用户登陆时需要选择一种登陆方式,系统再根据用户选择的登陆方式到相应的表中去搜索。例如,登陆时选择了工作人员登陆方式,系统将会在工作人员信息表中...

    微软活动目录管理管理简明手册

    网络信息可以分散在多台不同的计算机上,保证快速访问和容错;同时不管用户从何处访问或信息处在何处,对用户都提供统一的视图。可以这样说:没有活动目录,就没有Windows 2000。7 E9 e* I* K; J 8 F# j3 ^7 j$ j一...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    综上所述,“认我测”在线认证检测系统,率先填补了认证检测领域移动端的空缺,提供了Web浏览器+移动端的双端访问模式,给用户提供了多种访问途径,真正实现了用户和检测机构的随时随地在线下单检测。 关键词:...

    今客CRM客户管理系统 v3.0 CRM客户管理系统

    今客CRM客户管理系统主要是为了帮助企业解决在日常工作中遇到的客户管理等难题而开发,通过今客CRM客户管理系统可以对企业事务中的不同功能进行操作,用户通过自定义字段类型可以达到适合不同企业的需求。在今客客户...

    今客CRM客户关系管理系统 v15.01

    今客CRM客户管理系统主要是为了帮助企业解决在日常工作中遇到的客户管理等难题而开发,通过今客CRM客户管理系统可以对企业事务中的不同功能进行操作,用户通过自定义字段类型可以达到适合不同企业的需求。在今客客户...

    今客CRM客户关系管理系统 v15.01.zip

    今客CRM客户管理系统主要是为了帮助企业解决在日常工作中遇到的客户管理等难题而开发,通过今客CRM客户管理系统可以对企业事务中的不同功能进行操作,用户通过自定义字段类型可以达到适合不同企业的需求。在今客客户...

    今客CRM客户关系管理系统 完美版 v13.0.zip

    今客CRM客户管理系统主要是为了帮助企业解决在日常工作中遇到的客户管理等难题而开发,通过今客CRM客户管理系统可以对企业事务中的不同功能进行操作,用户通过自定义字段类型可以达到适合不同企业的需求。在今客客户...

Global site tag (gtag.js) - Google Analytics