1

私は現在、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 には、ページをレンダリングする前に「コントローラー ロジック」を実行するという概念がないというのは本当ですか?

4

1 に答える 1

2

JSF 2.xでは、次のようなページイベントを聞くことができます。

<f:metadata>
   <f:event type="javax.faces.event.PreRenderViewEvent" listener="#authenticator.checkAccess()}" />
</f:metadata>

これは、Seam 2ページのアクションとほぼ同等です(ただし、ポストバックを除外する必要があります)。Seam FacesなどのCDI拡張機能を使用して、デフォルトの動作をさらに強化できます。おそらく、ドキュメントを見て、ニーズに合ったものを確認することをお勧めします...

于 2012-04-04T10:29:45.957 に答える