一、原理
自定义一个全局Map(单例类),将用户的loginPk作为key,sessionId作为value。当用户访问需用权限访问的页面时,比较当前session的id与原map中的sessionId是否相等:不相等,则已在另一地点登录。然后用cookie设置一标志位,表示是否单点登录。当跳出来时,再在页面判断cookie的值,然后显示信息。
二、代码
1、自定义类UserContext.java
2、登录成功后:
UserContext.getInstance().isLogined(session.getId(), String.valueOf(map.get("pk")));
3、过滤器拦截
boolean isMorePointLogined = false; Object type = session.getAttribute("contactType"); String oldSessionId = null; String newSessionId = session.getId(); if(type!=null){ oldSessionId = UserContext.getInstance().getConcurrentHashMap().get(session.getAttribute("loginPk")); if(!newSessionId.equals(oldSessionId)){ isMorePointLogined = true; } }
4、过滤器跳转
// 非管理员身份不能进入后台界面 if(isMorePointLogined){ // 设置多点登录的状态 ===> 在index.jsp页面提示 Util.setCookie(httpServletResponse, "isMorePointLogined", Config.MorePointLoginSatus.TRUE); } httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/index.jsp");
5、jsp页面
if(tool.getCookie("isMorePointLogined")==='<%=com.society.tool.Config.MorePointLoginSatus.TRUE%>'){ steveAl('您的账号在异地登录!已被迫下线!', 3000); tool.delCookie("isMorePointLogined"); }
时间: 2024-08-09 14:44:52