4

私はJSFを初めて使用しますが、ページリダイレクトとページ転送で同じセキュリティレンダリングが生成されない理由を理解したいと思います。

バッキングメソッドを呼び出すJSFボタンがあります:

<h:form>
    <!-- content... -->
    <p:commandButton action="#{login.play}" ... />
</h:form>

ログインマネージドBean

public String play() {
   ...
   //forward implementation
   return "play";
}

public String play() {
   ...
   //redirect implementation
   return "play?faces-redirect=true";
}

私のページplay.xhtmlは保護されています。ロールのみadminまたはuserアクセスできますが、最初のplay方法では、セキュリティ制約が有効になっておらず、アクセスできます。なぜ違うのですか?

4

1 に答える 1

5

セキュリティはリクエストごとに実行されます。転送は、別のビューに対する現在の要求の応答を再利用します。リダイレクトにより、新しいリクエストが作成され、その応答が別のビューに使用されます。これは、ブラウザのアドレスバーにあるリクエストURLを確認することで簡単に確認できます。フォワードの場合は変更されません。

無関係なことに、POSTによるナビゲーションは不適切な方法です。結果を同じページに条件付きで表示するか、通常のリンクを使用してGETでナビゲートするか、POST後のリダイレクトでナビゲートする必要があります。

于 2013-01-25T15:36:40.140 に答える