我必须限制来自不同地方的用户的多次登录。为此,我编写了如下代码:
ServletContext context = session.getServletContext();
HashMap logInMap = null;
if (context.getAttribute("logInMap") != null) {
logInMap = (HashMap) context.getAttribute("logInMap");
if (logInMap .containsValue(session.getId())) {
System.out.println("duplicatesession");
// done something...
}else if ( logInMap.get(loginId) != null && !logInMap.get(loginId).equals(session.getId()) ) {
System.out.println("already Logged In");
//done something...
}
} else {
logInMap = new HashMap();
}
logInMap.put(loginId, session.getId());
context.setAttribute("loginMap",logInMap);但在上面的代码中,每个请求都会生成一个新的HashMap。如果我声明HashMap为静态,那么当我直接关闭浏览器时就会出现问题。如果有人能帮助解决这个问题,我们将不胜感激。如果解决方案在Spring中,那就太好了。
发布于 2017-08-04 17:57:51
如果我理解正确的话,您希望限制用户一次只登录一次。
用例1:一旦用户从另一个地方登录,就注销旧登录
解决方法:在login表中,在user_credentials表is_loggedIn中保留一列,登录成功时设置为True,注销后设置为false。每次检查登录凭据时,如果is_loggedIn设置为true,请在内部调用注销,以删除之前的用户,然后再次调用登录。
用例2:在用户从以前的状态注销之前,不允许用户登录
解决方案:参考上面在user_login credentials表中有一列的解决方案,如果is_loggedIn设置为真,则抛出错误消息"logout from previous device“。
https://stackoverflow.com/questions/45503573
复制相似问题