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_...
Java 访问 Domino 的编程指南...同时,Java 访问 Domino 对象需要经历预备步骤、JDK 及 IDE、API 及 访问协议、示例代码、参数定义、通过 IIOP 测试连接、通过 IOR 测试连接、连接池、读取 Domino 数等 Multiple 步骤。
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 用的时候引用到文件中
在"Keras Multiple outputs and multiple losses"中,我们将看到如何构建一个能够处理不同任务的神经网络模型。例如,这可以是图像分类和对象定位,或者预测连续变量和分类变量。关键在于设计网络结构以并行地处理...
为了帮助编程学习者深入理解和掌握Java编程语言的核心概念和结构,SSD3课程提供了一系列的Multiple-Choice题库。本文将对这些题库内容进行整理,以帮助读者巩固和加深对Java基础知识的认识。 首先,要了解Java应用...
在IT行业中,前端开发是不可或缺的一部分,而"multiple-select-1.5.2_lamp7ds_css/multiple-select_"这个标题暗示着一个专门用于实现HTML select元素多选功能的库。这个库可能是一个JavaScript插件,它使得用户在...
《深入理解Multiple-Select:基于Bootstrap的高效多选组件》 在Web开发中,用户界面的交互性与美观性是至关重要的,而“multiple-select-master”项目正是一款满足这一需求的优秀工具。该项目以其易用性和丰富的...
2. **多路分支捕获(Multiple Catch)**:Java 7允许在catch语句中捕获多种类型的异常,使得异常处理代码更加简洁和易于维护。 3. **类型推断(Type Inference for Generic Instance Creation)**:使用钻石操作符...
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 ...
在Java Web开发中,表单上传是常见的功能之一,尤其是当用户需要上传多个文件时。本文将详细讲解如何实现这个功能,主要涉及HTML表单、Servlet、MVC框架(如Spring MVC)以及文件处理的相关知识。 1. HTML表单设置...
在Java中,多文件上传的处理方式与单文件类似,只需要在HTML表单中设置multiple属性,用户就可以选择多个文件进行上传。在服务器端,通过循环遍历Part对象的集合,对每个文件进行单独处理。 "jsp文件上传"是另一种...
【标题】"POJ1426-Find The Multiple【BFS+同余模】"是一道来源于北京大学在线编程平台POJ的算法题目,主要涉及到了广度优先搜索(BFS)与同余模运算的知识点。这道题目要求解决的是寻找一个整数的倍数问题,可能...
在Java编程环境中,Swing库提供了丰富的组件用于创建图形用户界面(GUI)。"Multiple Span Cell Table" 是一个自定义的JTable实现,它扩展了Swing的默认功能,特别是增加了表格中单元格的多行多列合并能力。JTable是...