限制多次登录用户

时间:2017-08-04 09:48:42

标签: java

我必须限制来自不同位置的多个用户登录。 为此,我编写了代码:

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中会很棒。

1 个答案:

答案 0 :(得分:0)

如果我正确理解了问题,您希望一次只限制一个用户登录。

用例1:用户从其他地方登录后退出旧登录

解决方案:在登录表中,在user_credentials表中保留一列 is_loggedIn ,在成功登录时将其值设置为“True”,并在“logout”后设置为false。    每次检查时检查登录凭据,如果 is_loggedIn 设置为true,则在内部调用注销,删除以前的用户,然后再次调用login。

用例2:不允许用户登录,直到从以前的状态退出

解决方案:请参阅上面在user_login凭证表中有一列的解决方案,如果 is_loggedIn 设置为true,则抛出错误消息“从以前的设备退出”。

相关问题