11

Primefaces を使用して、JSF でログイン ベースのアプリケーションを開発しています。ログに記録されたユーザー情報をセッション スコープのマネージド Bean に保持し、ログアウトしたときにその詳細をクリアする必要があるため、SessionScoped ManagedBean オブジェクトにある詳細をクリアするにはどうすればよいですか?

4

3 に答える 3

20

アクション メソッドで次の関数を呼び出して、現在のセッションを無効にする必要があります。

FacesContext.getCurrentInstance().getExternalContext().invalidateSession();

また、セッション スコープの Bean は後続のリクエストを埋めて破棄されるため、必ずリダイレクトを送信してください。

FacesContext.getCurrentInstance().getExternalContext().redirect("/login.xhtml");

または、単にメソッドからナビゲーション ケースの結果を返します。

return "login.xhtml?faces-redirect=true";

セッションを無効にし、効果的にセッション スコープ Bean を保持したくない場合 (これは私の意見では悪い習慣です)、すべてのユーザー データを無効にするだけです (できれば、1 つのセッション スコープ マネージド Bean で収集されます)。ログアウト メソッド (ログアウト メソッドが別のセッション スコープ Bean に存在する場合は、その Bean を注入する必要がある場合があります)。

于 2013-02-21T11:31:53.650 に答える
3

セッション スコープのマネージド Bean を手動でクリアする必要はありません。ユーザーセッションをクリアするだけです。ログアウト用のサーブレットで次のコードを使用します。

protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
    response.setContentType("text/html;charset=UTF-8");
    System_Properties system_Properties=new System_Properties();
    PrintWriter out = response.getWriter();
    try {
        request.getSession().invalidate();            
    }finally {
        out.close();
    }
}

マネージド Bean データを手動でクリアする場合は、次のコードを使用して実行できます。

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("managed_bean_name", null);

ここで、「mananged_bean_name」はマネージド Bean の名前です。

それが役に立てば幸い

于 2013-02-21T11:17:41.180 に答える
-3

ユーザーがログアウトすると、セッションが破棄され、すべての SessionScoped ManagedBean オブジェクトも破棄されます

于 2013-02-21T11:13:50.390 に答える