私は現在、Java EE 6/JSF 2 webapp の一部の認証用の共通ロジックをどこに置くべきか頭を悩ませています: 特定の Cookie を伴うすべての要求を別のページにリダイレクトする必要があるという要件があります。
私は3つの解決策を検討しました:
1) サーブレット 3.0 フィルター (@WebFilter) を使用すると、 これが機能します。マネージド Bean をそこに注入することもできますが、マネージド Bean には、フィルター呼び出し時にまだ設定されていない面の externalContext へのアクセスが必要なので、NPE を取得しましたマネージド Bean の呼び出し
2) フェーズ リスナーを使用すると、フェーズ リスナーは CDI コンポーネントになることができず、他のコンポーネントを注入できないため (el-evaluation を除く)、これは厄介です。私にとって phaseListener は、ナビゲーションロジックを入れるのが技術的だと感じています。
3) Seam 2.0 では、このような目的で「ページ アクション」を使用できましたが、この概念は JSF 2.0 には反映されていないようです。
縫い目では、これは次のようになりました:
<page view-id="/admin/*.jsf">
<action execute="#{authenticator.checkAccess()}" />
</page>
JSF 2.0 には、ページをレンダリングする前に「コントローラー ロジック」を実行するという概念がないというのは本当ですか?