有些情况下你也许会由这样的一个需求,就是限制同一个账号在不同地点上面重复登录,就像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对应的值,否则什么事情都不做。
}
分享到:
相关推荐
这个功能在许多网络应用中都十分常见,主要用于保护用户的账号安全,防止同一账号在不同地点同时登录,可能引发的安全风险。 首先,我们要理解这个功能的工作原理。限制异地重复登录通常涉及到以下几个核心步骤: ...
"防止用户重复登录"这一话题,主要关注的是如何确保单一账号在同一时间只能在一个设备或浏览器会话中进行有效登录,以提升系统的安全性并保护用户的隐私。 一、为什么要防止用户重复登录? 1. 安全性:防止恶意...
首先,我们需要理解为什么要防止用户重复登录。这主要是为了防止恶意用户通过多次登录尝试绕过系统的安全性,或者是为了保护用户的账户,避免他们意外地在多个窗口或浏览器标签页中保持活动状态,可能导致数据混乱或...
### Freeradius 2.1.3 防止用户账号重复登录 #### 知识点一:Freeradius简介及版本说明 Freeradius是一款开源的RADIUS服务器软件,广泛应用于网络认证、授权和计费(AAA)场景中。RADIUS协议允许远程设备如无线接...
在C#编程中,"同一个账号只能登录一次"的需求是一个常见的多用户系统设计规范,它旨在确保用户账户的安全性和系统的一致性。当一个账号在一处登录后,其他地方的同一账号尝试登录时,系统应该拒绝该请求或者强制结束...
在Java中,实现同一账号不能同时登录是非常重要的一点,以下我们将讨论两个方法来实现这一点。 首先,让我们看一下第一种方法。在这个方法中,我们首先在baseAction中或者直接在action中写一个方法,并将其静态map...
它主要目的是阻止同一用户在不同设备或浏览器上同时保持活跃的登录状态,避免账户被恶意利用或者因为用户忘记退出而导致信息泄露。下面我们将深入探讨防止重复登录的相关知识点。 1. **登录原理**:在标准的Web登录...
在Web开发中,为了保障用户账号的安全性和系统的稳定性,经常会遇到需要限制同一用户账号不能同时在多个地方登录的需求。本文将详细解析一种通过ASP.NET实现同一用户名不能同时登录的解决方案。 #### 一、问题背景...
在这个场景中,我们关注的是如何利用`Session`来控制用户的重复登录以及统计在线用户数量。下面将详细介绍这两个核心知识点。 1. **重复登录控制**: 当用户成功登录后,通常会将用户的一些关键信息(如ID、用户名...
本文将详细介绍如何利用Flex技术解决消息通讯、账号重复登录以及限制一台电脑仅允许一个账号登录等问题。 #### 一、消息通讯的实现 Flex是一种强大的客户端开发技术,它可以很好地处理多媒体内容,并且能够通过...
在Java开发中,确保用户不可重复登录是一项重要的安全措施,防止同一账号在多个设备或浏览器上同时登录。本文将深入探讨如何使用Java实现这一功能,包括理解用户在线的原理、session的工作机制以及如何处理重复登录...
有些情况下你也许会由这样的一个需求,就是限制同一个账号在不同地点上面重复登录,就像QQ一样,一个账号只能一个人登录,别人登录你的账号的话,那你这边就会提示“已在别处登录”并强制登出。 其实实现起来不是很...
当用户尝试在另一地点登录时,系统首先检查该用户的唯一标识符是否已经存在,如果存在,则拒绝新的登录请求;如果不存在,则允许登录并更新标识符的状态。 #### 示例代码分析 提供的代码片段展示了一个基本的实现...
在“易语言-易语言实现限制异地重复登陆”这个主题中,我们将深入探讨如何使用易语言来开发一个功能,以防止同一账号在不同地点同时登录,从而保障系统安全。 首先,我们要理解“限制异地重复登陆”的基本原理。...
在实际的应用场景中,为了提高系统的安全性以及用户体验,很多系统都需要实现同一个用户在同一时间只能在一个地方登录的功能。这样的设计可以有效避免用户账号被恶意盗用的风险,并且能够确保数据的安全性。在 ASP...
本篇文章主要介绍了Java Web之限制用户多处登录实例代码,可以限制单个用户在多个终端登录。该实现方法通过使用一个全局Map在登录的时候用来保存sessionId,Map的key为登录名,value为sessionID。同时,实现一个...
shiro+redis 实现登录控制及密码重试次数超过5次后账号锁定一分钟不能登录
设计一个拥有注册、登录、退出功能的小程序。 一、接口提供方 (1)使用面向对象思想,将方法封装到某个类中。 (2)创建一个独立的包、模块存放这个类。...(2)主程序一直在循环运行,等待用户输入。
在基于JSP和Spring框架的应用中,防止用户重复登录是为了避免同一账号在多个设备或浏览器上同时登录,这可能导致数据混淆、安全风险以及对用户隐私的侵犯。Spring Security是Spring生态系统的强大组件,专门用于处理...
标题中的“使用Cookie...总的来说,通过利用Cookie,开发者可以为用户提供便捷的登录体验,让用户在多个账户间轻松切换,而无需重复登录。这种技术在现代Web应用中非常常见,但同时也需要注意处理好安全和隐私问题。