問題:私は自分のアプリケーションの一部のページにいて、しばらく離れます。表示されたリンクをクリックすると、「viewIDを復元できません」というメッセージが表示されます。リフレッシュと同じです。次に、新しいセッションがあるセッションタイムアウトを正常に処理する方法は何ですか?
http://localhost:8080/myapp/index.xhtml
に
http://localhost:8080/myapp/index.xhtml?windowId=e9d
:
私は新しいセッションを開始することができますが、私は次のように手動でURLを編集する必要があります。
アクティブアドレスウィンドウ確立され、ユーザーは私が欲しいものを再度ログインする必要があります。
これに対処する方法を調べるには、クライアントサイドのJavascriptを使用してセッションを生きている状態に保つために定期的にリクエストを送信することによって、セッションを生き生きとさせる多くの "解決策"があります。個人的に私はこれを望ましい解決策とは考えていません。
私が望むのは、セッションがタイムアウトするときに、非公開ページへのすべての後続のリクエストをindex.xhtmlに送る必要があることです。ログインを必要としないページへの参照は、新しいセッションオブジェクトを経由しなければなりません。これは、JSF 2で定義された機能だけを使用して処理するのが望ましいですが、Servletフィルタを書くのは気にしません。
誰かが私が見逃したハウツーへのリンクを提供することはできますか?
私はアプリケーションレベルでユーザー認証を処理しています。ログインと呼ばれる@SessionScoped Beanがあり、そのプロパティの1つは、ユーザーがログインしていない場合はnullのユーザーオブジェクトです。サンプルコードを変更するだけで、フィルターからマネージドBeanをフェッチする方法を知っていると思いますそれに応じて。 sendRedirect()呼び出しが要求のそれ以上の処理を中止すると仮定することはできますか? – AlanObject
はい、そうです。他のすべてのフィルタ/サーブレット( 'FacesServlet'も)は、' chain.doFilter() 'によってリクエスト/レスポンスを続けるときにのみ呼び出されます。関連:http://stackoverflow.com/questions/6883430/prevent-accessing-restricted-page-without-login-in-jsf2 – BalusC
セッションスコープのオブジェクトにアクセスする必要があるため、このソリューションで問題が発生しました。認証ステータス。 Filter内のFacesContextオブジェクトへのアクセス権を得ることは、最高で苦労します。代わりにこれを行うにはPhaseListenerを使用する方がよいでしょうか?私はここにあなたのWebページを見ています:http://balusc.blogspot.com/2006/06/communication-in-jsf.html#AccessingTheFacesContextInsideHttpServletOrFilter – AlanObject