Mojarra で発生していた潜在的なパフォーマンスの問題を発見した後、最近、アプリケーションを Mojarra 2.1.7 から MyFaces 2.1.10 実装で実行するように切り替えました。
私は、かなり拡張子のない URL を可能にする OmniFaces SEO 機能を使用しています。これは、サーブレット フィルターを使用して動作し、コンテキスト パラメーターを にweb.xml
追加し、Web アプリケーションの xhtml ドキュメント レイアウトを反映するディレクトリfaces-views
を WEB-INF に追加することによって自動的に有効になります。
ただし、Spring コンテナーと、JSF 依存性注入を Spring 依存性注入に置き換えるカスタム EL リゾルバーを利用しているため、Spring との互換性の問題について少し心配していました。これにより、すべてのマネージド Bean も Spring Bean になります。さらに心配なのは、受信リクエストをインターセプトして認証するサーブレット フィルターを使用して動作する Spring Security を実装していることです。私が心配していたのは、この 2 つがたまたま特定の順序で呼び出された場合、正しく動作しないのではないかということでした。
Mojarra の ExtensionlessURLS 機能は、ドキュメントに記載されているものとは少し異なります。
Mojarra で動作させるには、xhtml ファイルを元の場所に残すだけでよいことに気付きましたが、faces-views
ディレクトリに同じ名前と相対パスの空のファイルを配置する必要がありました。フィルタは拡張子のないリクエストまたは XHTML リクエストのいずれかを認識し、ページを適切に表示するように見えました
ただし、MyFaces に切り替えたとき、この動作が変更され、faces-views
ディレクトリ内の空のファイルが原因で、ページ要求時に Premature EOF Exception がスローされるようになりました。XHTML と拡張子のないリクエストの両方を処理できるようにするには、両方の場所で同じページの複製コピーを保持する必要があることに気付きました。
ファイルを実行することでこれを回避しようとfaces-views
しましたが、ソースが見つかりましたが、これを行ったときにページが正しく読み込まれませんでした。
私の質問は、Mojarra と MyFaces で ExtensionlessURL を使用すると、なぜ異なる動作が見られるのですか? この理由でSpring Securityはできますか?プロジェクトで同じソース コードの 2 つのコピーを保持する必要がないように、この問題を回避するにはどうすればよいですか (これを受け入れることで、ばかげたエラーや機能の欠落を招いていることは明らかです)。