5

Tomcat で Java サーブレット API を使用しています。

ユーザー名と属性ユーザー名を持つ httpsession をハッシュ テーブルに保存します。httpsession が有効かどうかを確認する方法があるかどうかを知りたいです。

私はもう試した:

try {
    String user = httpSession.getAttribute("username")
    return "is valid";
} catch (IllegalStateException e) {
    return "is not valid";
}

「ログに記録された」ユーザーが複数の場所から接続したくない場合はどうすればよいですか? 新しいセッションを作成する場合にのみ制御すると、彼が別のセッションに既に接続されているかどうかを知ることができません。

4

3 に答える 3

11

httpSession を独自のハッシュに保存する必要はありません。

HttpServletRequestの API を見てください。メソッドgetSession(Boolean x) (新しいセッションを作成しないように false を渡す) を見ると、セッションが有効かどうかが判断されます。

ここに例があります

public void doGet(HttpServletRequest req, HttpServletResponse res) {
    HttpSession session = req.getSession(false);
    
    if (session == null) {
       //valid session doesn't exist
       //do something like send the user to a login screen
    }

    if (session.getAttribute("username") == null) {
       //no username in session
       //user probably hasn't logged in properly
    }

    //now let's pretend to log the user out for good measure
    session.invalidate();
}

補足として、私があなたの質問を適切に読み、情報を独自のマップに保存している場合は、メモリリークを作成せず、ハッシュテーブルからエントリを自分でクリアしないように注意する必要があります。

于 2011-07-15T17:54:06.780 に答える
2

私はショーンに同意します。このタイプのチェックの良い方法は、フィルターを使用することです。

こちらをご覧くださいサーブレットフィルター

Sean が書いたコードを代わりに Filter に入れるだけです。web.xml でフィルタを定義すると、リクエストが来るたびにフィルタが実行されます。

このようにして、ユーザーが認証されているかどうかを検証できます。サーブレット コードを乱雑にすることなく。

于 2011-07-15T18:13:45.860 に答える
0

保存されたセッションが有効かどうかを確認するのではなく、HttpServletRequestサーブレットで を見て、それを確認する必要がありますisRequestedSessionIdValid()。サーブレットで作業する場合、ハッシュ テーブルに保存するのではなく、常にSessionから取得できます。Request

于 2011-07-15T17:46:35.727 に答える