Primefaces を使用して、JSF でログイン ベースのアプリケーションを開発しています。ログに記録されたユーザー情報をセッション スコープのマネージド Bean に保持し、ログアウトしたときにその詳細をクリアする必要があるため、SessionScoped ManagedBean オブジェクトにある詳細をクリアするにはどうすればよいですか?
3 に答える
アクション メソッドで次の関数を呼び出して、現在のセッションを無効にする必要があります。
FacesContext.getCurrentInstance().getExternalContext().invalidateSession();
また、セッション スコープの Bean は後続のリクエストを埋めて破棄されるため、必ずリダイレクトを送信してください。
FacesContext.getCurrentInstance().getExternalContext().redirect("/login.xhtml");
または、単にメソッドからナビゲーション ケースの結果を返します。
return "login.xhtml?faces-redirect=true";
セッションを無効にし、効果的にセッション スコープ Bean を保持したくない場合 (これは私の意見では悪い習慣です)、すべてのユーザー データを無効にするだけです (できれば、1 つのセッション スコープ マネージド Bean で収集されます)。ログアウト メソッド (ログアウト メソッドが別のセッション スコープ Bean に存在する場合は、その Bean を注入する必要がある場合があります)。
セッション スコープのマネージド 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 の名前です。
それが役に立てば幸い
ユーザーがログアウトすると、セッションが破棄され、すべての SessionScoped ManagedBean オブジェクトも破棄されます