我必须限制来自不同位置的多个用户登录。 为此,我编写了代码:
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中会很棒。
答案 0 :(得分:0)
如果我正确理解了问题,您希望一次只限制一个用户登录。
用例1:用户从其他地方登录后退出旧登录
解决方案:在登录表中,在user_credentials表中保留一列 is_loggedIn ,在成功登录时将其值设置为“True”,并在“logout”后设置为false。 每次检查时检查登录凭据,如果 is_loggedIn 设置为true,则在内部调用注销,删除以前的用户,然后再次调用login。
用例2:不允许用户登录,直到从以前的状态退出
解决方案:请参阅上面在user_login凭证表中有一列的解决方案,如果 is_loggedIn 设置为true,则抛出错误消息“从以前的设备退出”。