そのため、ViewExpiredException に関連する回答を確認し、これを Ajax リクエストで処理したところ、うまく処理されました。ただし、ViewExpiredException を適切に取得しない構成があります。
アプリケーションには、各リクエストを監視し、URL が認証されたユーザーを必要とするかどうかを判断し、ユーザーが認証されているかどうかを確認する SecurityFilter があります (セッションでユーザー オブジェクトを調べます)。
問題は、JSF が ViewExpiredException を実際に判断する前にフィルターがリクエストを処理するため、認証されていないため、ログイン ページに転送することです。これは、セッションが期限切れになり、ユーザー オブジェクトがセッションに存在しなくなったために発生します。
セキュリティ フィルタを削除すると、ViewExpiredException が発生します。
私の質問は、承認を検証するために別の手法を使用する必要がありますか? JSFがリクエストを処理できるようにしてから、承認を確認するものですか?
また、投稿の代わりに取得するときにのみ認証をチェックすることも考えましたが、ViewExpiredException を取得しますが、誰かが POST を直接使用すると、認証にギャップが残ります。
最大の問題は、セッションがタイムアウトしたか、ユーザーが許可されていない URL を入力したかをフィルターで判断できないことです。ログインページにリダイレクトされても結果は同じですが、エラーメッセージは特定できません。
注: MyFaces、JSF 2.2、および PrimeFaces を使用しています。
どんな提案でも大歓迎です!