if (isLogin) { //Forbid Multiple Login //User login success, refresh session map, if multiple login, make the exists session invalid String sessionIdFromMap = SessionListener.userMap.get(portalLoginName); String sessionIdFromReq = request.getSession().getId(); logger.debug("-------Session ID from user map: {}---------", sessionIdFromMap); logger.debug("-------Session ID from request: {}---------", sessionIdFromReq); if(sessionIdFromMap != null&&!sessionIdFromMap.equals("")){ if(sessionIdFromMap.equals(sessionIdFromReq)){ logger.debug("======session map equals request session id====="); SessionListener.sessionMap.get(sessionIdFromMap).invalidate(); SessionListener.userMap.put(portalLoginName, sessionIdFromReq); SessionListener.sessionMap.put(sessionIdFromReq, request.getSession()); }else{ if (SessionListener.userMap.containsKey(portalLoginName)) { logger.debug("=========the same user multiple login========="); SessionListener.sessionMap.get(sessionIdFromMap).invalidate(); SessionListener.userMap.put(portalLoginName, sessionIdFromReq); SessionListener.sessionMap.put(sessionIdFromReq, request.getSession()); } } logger.debug("=====new session to put into map===="); SessionListener.userMap.put(portalLoginName,request.getSession().getId()); SessionListener.sessionMap.put(request.getSession().getId(),request.getSession()); .... }
listener:
public class SessionListener implements HttpSessionListener { private static final Logger logger = LoggerFactory.getLogger(SessionListener.class); public static Map<String, String> userMap = new HashMap<>(); public static Map<String, HttpSession> sessionMap = new HashMap<>(); @Override public void sessionCreated(HttpSessionEvent se) { // TODO Auto-generated method stub } @Override public void sessionDestroyed(HttpSessionEvent se) { HttpSession session = se.getSession(); String sessionId = session.getId(); logger.debug("-------------session[{}] destroy---------", sessionId); sessionMap.remove(sessionId); for (String key : userMap.keySet()) { if (userMap.get(key).equals(sessionId)) { userMap.remove(key); } } } }
web.xml:
<listener> <listener-class>com.hkt.umg.unified.portal.web.SessionListener</listener-class> </listener>
思路:
1.如果第一次登陆,记录登陆的session id
2.如果第二次登陆的session id和第一次相同,而且登录名也一样,则清除掉第一次的session;若session id不同则记录第二次的session id
参考:
https://blog.csdn.net/football98/article/details/52777575
相关推荐
`name="files[]"` 的设定使得在服务器端(例如Java JSP)可以通过数组形式访问上传的文件。 然而,对于不支持`multiple`属性的浏览器,如IE9及以下版本,开发者需要采用其他策略来实现多文件上传。一种常见的方法是...
多文档文本编辑器--Multiple Documents Text Editor 使用java语言按照java Bean 规范进行开发,基于MVC模型, 编码规范简洁,结构紧凑,且有详细注释,很适用于java初学者 作为进阶的参考! 该软件实现了多文档编辑...
multiple-shiro-login multiple shiro login shiro配置文件 portal: SecurityConfig.java 过滤/请求,不包含/admin/ admin: AdminSecurityConfig.java 过滤/admin/**请求 因为/**包含/admin/**,所以需要优先过滤/...
Java Platform Standard Edition 7 Documentation What's New Documentation Release Notes Tutorials and Training The Java Tutorials Java Training More Information Java SE 7 Names and ...
《中控大屏可视化插件:Multiple Data Visualization Resources》 在现代数据分析与展示领域,数据可视化扮演着至关重要的角色。"Multiple Data Visualization Resources" 提供的 "Multiple_Graph_And_Chart_UI_...
Multiple Terrain Brush is an editor tool with brushes for heightmaps and textures that work on multiple terrains. You can easily paint heightmap and textures, without switching from terrain to terrain...
多选框要用到的js multiple-Select.js 用的时候引用到文件中
SSD3 Multiple-Choice 整理 本资源摘要信息主要涉及 Java 编程语言的多-choice 题库,涵盖了 Java 应用程序的基本概念、对象表示、控制语句等知识点。 1.Java 应用程序的入口方法 Java 应用程序必须包含一个 main...
在"Keras Multiple outputs and multiple losses"中,我们将看到如何构建一个能够处理不同任务的神经网络模型。例如,这可以是图像分类和对象定位,或者预测连续变量和分类变量。关键在于设计网络结构以并行地处理...
在IT行业中,前端开发是不可或缺的一部分,而"multiple-select-1.5.2_lamp7ds_css/multiple-select_"这个标题暗示着一个专门用于实现HTML select元素多选功能的库。这个库可能是一个JavaScript插件,它使得用户在...
Separate the wiring of multiple modules from application logic Use Java annotations for configuration Master the scripting API built into the Java language Understand static versus dynamic ...
2. **多路分支捕获(Multiple Catch)**:Java 7允许在catch语句中捕获多种类型的异常,使得异常处理代码更加简洁和易于维护。 3. **类型推断(Type Inference for Generic Instance Creation)**:使用钻石操作符...
当我们需要在下拉列表中允许用户选择多个选项时,可以使用 `multiple` 属性。标题 "multiple-select-master" 提到的就是这个功能,即在 `select` 元素中启用多选模式。下面将详细讲解 `multiple` 属性的使用方法、...
在Java Web开发中,表单上传是常见的功能之一,尤其是当用户需要上传多个文件时。本文将详细讲解如何实现这个功能,主要涉及HTML表单、Servlet、MVC框架(如Spring MVC)以及文件处理的相关知识。 1. HTML表单设置...
在Java中,多文件上传的处理方式与单文件类似,只需要在HTML表单中设置multiple属性,用户就可以选择多个文件进行上传。在服务器端,通过循环遍历Part对象的集合,对每个文件进行单独处理。 "jsp文件上传"是另一种...
【标题】"POJ1426-Find The Multiple【BFS+同余模】"是一道来源于北京大学在线编程平台POJ的算法题目,主要涉及到了广度优先搜索(BFS)与同余模运算的知识点。这道题目要求解决的是寻找一个整数的倍数问题,可能...
* 接口技术为在 Java 中实现多重继承(multiple inheritance)提供了可能性。 接口的优点是: * 实现松散关联关系(loose coupling),使类之间的关系更加灵活。 * 使类独立存在,提高了系统的灵活性和可维护性。 ...
《jQuery multiple-select-master 插件详解与应用》 在网页开发中,选择框(select)是一种常见的表单元素,用于让用户从预设的选项中选取一个或多个值。然而,原生HTML的多选框功能相对单一,无法满足现代网页交互...