2013-02-21 9 views
10

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

答えて

16

を役に立てば幸い

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

それとも、単にあなたの方法からナビゲーション・ケースの結果を返します:

リダイレクトを送信してください
return "login.xhtml?faces-redirect=true"; 

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

-2

すると、ユーザーのログアウト、セッションが破棄され、手動で管理対象BeanスコープのすべてのSessionScoped ManagedBeanがあまりにも

+2

"ログアウト"は定義ごとに "セッションが破棄されました"ではありません。しかし、他の方法は、通常は本当にです。 – BalusC

+0

私は同意しません。ログアウトは、通常の「セッション無効化」を意味します。それはベストプラクティスであり、共通のパターンです。セッションを破棄しないと、セキュリティの問題 –

+1

が生成されます。そうであれば、OPは最初にこの質問をしませんでした:) – BalusC

3

オブジェクトは、セッションをクリアする必要はありません。ユーザーセッションをクリアするだけです。 ログアウトのためにサーブレットで次のコードを使用します。

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の名前です。セッションは、Beanは次の要求をburingゴミ箱に移動されているスコープとして、あること、また

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

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

関連する問題