6

相互に構築されたシリーズの登録ページがあります。ユーザーセッションが期限切れになると、サーバー上のすべてをクリーンアップし、うまく機能するリスナーがあります。しかし、ユーザーが何か他のことをしようとすると、シリーズの最初のページにリダイレクトしたいだけです。ただし、フィルターが正しく機能していないようです。javax.faces.application.ViewExpiredException が発生し続けます

この例外を処理するためのベスト プラクティスは何ですか? グローバルすぎるため、web.xmlで処理することはできません。さらに、一部の JSF コードからエラー ページがレンダリングされています。そもそも例外が発生しないように、PhaseListener を使用してこれが発生していることを把握する必要があるようですが、適切なモデルを見つけることができませんでした。これを行う方法について。何か案は?

4

5 に答える 5

2

Richfaces には、ViewExpiredException を処理するための独自のメカニズムがあります。Richfaces docsを参照してください。

于 2009-08-18T17:25:25.757 に答える
1

これを処理する方法は、追跡するURLにのみマップされたフィルターをweb.xmlに追加することです。このフィルターは、セッションの有効期限が切れているかどうかを確認し、有効期限が切れている場合はログインページに転送します。JSFコードを実行する前にフィルターを実行すると、機能するはずです。

于 2009-08-18T16:21:18.930 に答える
1

あなたはフェーズリスナーのいる正しいトラックだと思います。基本的に、最初のページのセッションで何かを設定します。次に、フェーズリスナーでセッションの値を探します。終了しない場合は、リダイレクトを実行します。秘訣は、フェーズリスナープロセスの早い段階でそれを行うことです。プロセスのどこでフェーズリスナーが例外をスローしているのか正確にはわかりません。

于 2009-08-04T20:47:20.313 に答える
1

私が過去にこれを処理した方法は、マネージド セッション Bean のフィールドをチェックするリスナーを使用することでした。ユーザー セッションがタイムアウトした場合、リスナーは mbean をクリーンアップし、ユーザーがログインしていないとマークします。すべての要求はリスナーを介して送信され、要件が満たされない場合、ユーザーは強制的にサイトから退出させられます。ログに ViewExpiredException が表示されません。この例外が発生するのは、サーバーが再起動され、ユーザーが以前のアクティブなセッションでページを要求した場合のみです。

于 2009-08-31T03:03:30.370 に答える
0

セッションが無効かどうかを確認できます

boolean sessionInValid = httpServletRequest.getRequestedSessionId() != null && !httpServletRequest.isRequestedSessionIdValid();

ここで、ブール変数 sessionInValid は、セッションが何らかの手段で無効になっている場合に true を返します。

これをフィルターまたはリスナーに追加してから、web.xml ファイルで構成できます。

于 2009-08-06T07:01:44.490 に答える