0

フォーム認証を使用した JSF ログイン ページがあります。HttpServletRequest.login(username, password) を呼び出してユーザーにログインします。ログアウトするには、最初に ExternalContext.invalidateSession() を呼び出し、次に現在のユーザーに対して HttpServletRequest.logout() を呼び出します。

私の計画は、ユーザーがログインするたびにリストに追加し、ユーザーがログアウトするときにリストから削除することにより、アプリケーション スコープのリストでログインしているユーザーを追跡することです。

このアプローチには 2 つの懸念があります。

  1. すでにログインしているユーザーが、最初にログアウトせずに再度ログインしようとした場合、既存のセッションを無効にしてクリーンアップを行いたいと考えています。特定のログイン ユーザーのセッションにアクセスするにはどうすればよいですか? この機能を使用して、一部のユーザーを強制的にログアウトすることもできます。

  2. セッションの有効期限が切れた場合 (タイムアウトなど)、ログインしているユーザーのリストからユーザーを削除したいと考えています。セッションの有効期限をリッスンするにはどうすればよいですか?

4

1 に答える 1

2
  1. Map<User, HttpSession> logins自分で適用範囲を維持します。ログイン中に、logins.put(user, session)返されないかどうかを確認しnullてから無効にします。

  2. 実装し、それに応じて実装してUser、. または、 を制御できない場合は、代わりに実装して削除を実行します。HttpSessionBindingListenervalueUnbound()logins.remove(this)UserHttpSessionListener#sessionDestroyed()


具体HttpServletRequest#logout()的な問題とは関係ありませんが、既にセッションを無効にしている場合、呼び出しは不要です。とにかく、ユーザーはセッションに関連付けられています。

于 2012-10-22T02:26:31.727 に答える