2017-08-04 14 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を静的と宣言すると、ブラウザを直接閉じている間に問題が発生します。 いずれかがこの問題を助けることができれば幸いです。 解決策が春にある場合は素晴らしいでしょう。

+0

あなたのコードによると、あなたは 'ServletContext'に' HashMap'を格納し、それを毎回生成しません。静的として宣言するべきではありません。どのような "問題が発生した"?春の方法は[春のセキュリティ](https://projects.spring.io/spring-security/)です。これは恐らくあなたが必要とするものを過剰にするでしょう。 – Oleg

答えて

0

私が問題を正しく理解していれば、一度に1つだけのユーザーログインを制限する必要があります。

ユースケース1:古いログインログアウトユーザログインいったん別の場所から

ソリューション:ログインテーブルで、user_credentialsテーブルの列を保持し、is_loggedIn、ログインに成功し、セットに「True」にその値を設定"logout"の後にfalseになります。 毎回ログイン資格情報を確認しながら、is_loggedInがtrueに設定されている場合は、内部でログアウトして前のユーザーを削除し、再度ログインします。

ユースケース2:その前の状態からログアウトするまで、ユーザは、ログインすることはできません。

対処:前のデバイスからの資格情報のテーブルをUSER_LOGINの列を持つの上記溶液に参照のうえすると、エラーメッセージを投げる「ログアウト"is_loggedInがtrueに設定されている場合

+0

ユースケース1は私には適していますが、私はデータベース上でのみ認可を表示しています。私はデータベースと対話することなくそれを行う必要があります。 –

関連する問題