何年もの間、ログイン後にアプリケーションのウェルカムページに移動しないことがある理由に戸惑いました。私はついにそれを理解しました(他のみんなから数年後):
j_security_checkで正常にログインし、ウェルカムページに移動します
セッションタイムアウトを待つ
GETリクエストを送信するh:linkをクリックします
これはGETであり、POSTではないため、カスタムViewExpiredException
ハンドラーは起動しません
セッションがタイムアウトしたため、コンテナセキュリティはログインページにリダイレクトします。セッションタイムアウト+コンテナセキュリティのため、(h:linkからの)getリクエストは、フェーズリスナーまたはフィルターのいずれかでアプリケーションに表示されません。再度ログインに成功しました
j_security_checkは、
認証をトリガーしたページ(この場合はGETリクエストのターゲット)にリダイレクトします。
私が理解していなかった最後のビットは、それが常にウェルカムページに行くだろうと思いました。
私の問題は、現在の設計では、ログイン後に常にウェルカムページを表示する必要があることです。ウェルカムページにはpreRenderViewイベントがあり、ログイン後にセッションスコープのBeanにコンテキスト情報を設定し、いくつかのカウンターなどをインクリメントします。
このコンテキスト情報は、他のページのBeanコードをサポートするために必要です。現在、最初にウェルカムページを通過しないと、例外が発生します。
それを修正するという点で、私は次のオプションを見てきました:
理想的には、呼び出すことができる@PostLoginメソッドがあり、それによって私のすべての問題がきれいに解決されます。Myfaces CODIでJSF(Mojarra)を使用していますが、希望どおりの動作をするものが見つかりません。
フィルタにコードを追加することもできますが、データ(ログイン数など)を保持する必要があります。これは適切なオプションのようには見えません。たぶん私は間違っています。
j_security_checkの潜在的なターゲット(GETで呼び出されるページ)のすべてのpreRenderViewメソッドが、j_seecurity_checkから直接呼び出される場合を処理するようにします。これが私がしなければならないことであることがわかりますが、それは多くの面倒のようです。
j_security_checkの動作をオーバーライドするために、glassfish用のサーバー認証モジュールを作成します。
これは通常どのように処理されますか?何年にもわたってPOSTを悪用した後、単純なナビゲーションケースのGETに移行した後、この問題が発生し始めました。カスタム例外ハンドラーが機能しません。誰かがこの問題について何かガイダンスを持っているなら、私はそれを感謝します、少なくとも私は今何が起こっているのか知っています。うまくいけば、私は明らかな何かを逃しました!
ありがとうO/S