2017-08-04 93 views
0

我必須限制來自不同地點的多個用戶登錄。 爲此,我已經寫代碼:限制用戶的多次登錄

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

根據你的代碼,你將'HashMap'存儲在'ServletContext'中,而不是每次都生成它。你不應該聲明它是靜態的。發生了什麼「問題」? Spring的方式是[spring security](https://projects.spring.io/spring-security/),它可能是你所需要的一種矯枉過正。 – Oleg

回答

0

如果我正確理解問題,您只想限制一次登錄用戶。

使用案例1:從另一個地方

解決方案註銷舊登錄一次,用戶登錄:在登錄表,請user_credentials表中的列,is_loggedIn,其值設置爲對成功登錄「真」,並設置在「註銷」後爲false。 每次檢查時檢查登錄憑證,如果is_loggedIn設置爲true,則在內部呼叫註銷以刪除先前的用戶,然後再次呼叫登錄。

使用案例2:不允許用戶登錄,直到其從先前的狀態登出

解決方案:指的具有USER_LOGIN憑證表中的列的上述溶液中,拋錯誤消息「從先前設備註銷「如果is_loggedIn設置爲true。

+0

用例1適合我,但我只能查看數據庫的授權。我需要做到這一點,而不與數據庫交互。 –