2

現在、特定の基準に従ってドキュメントのリストをフィルタリングしています。

次に、このリストをユーザーに提示すると、

<p:commandButton action="#{controllerBean.downloadDocument(document.id)}" ajax="false" />

レンダリングされたコードを見ると、ドキュメント ID がどこにも表示されませんが、何らかの形でエンコードされていて、 client からデコード、変更、再エンコードできるという意味ではありません。

JSF の状態処理に関する私の理解は非常に不十分ですが、間違っていたら訂正してください。アクション パラメータ値の値をクライアントから手動で変更することはできません。クライアントに保存されている場合でも、サーバーだけがセッションをデコードおよびエンコードできるからです。パラメータ値はそこに保存されます。downloadDocument(document.id)ユーザーが特定のものをダウンロードする権限を持っていることを確認するためにチェックを追加する必要がありますdocument.idか? 将来的にはこのチェックを追加しますが、この問題が現在どれほど重大であるかを知りたいです。

4

1 に答える 1

3

MethodExpressionこれは JSF コンポーネント ツリーに (JSF ビュー ステートではなく)として保存され、INVOKE_APPLICATION問題のコマンド コンポーネントによってトリガーされるフォーム送信のフェーズ中にサーバー側で評価されます。実際には、HTML 出力にエンコードされることはまったくありません<f:param>(たとえば、PrimeFaces に精通している場合は、これがまさに、<p:graphicImage>その値で EL メソッドのパラメーターを操作できず、ネストされて<f:param>います)。

唯一の「リスク」は、 (間接的に)INVOKE_APPLICATIONの評価中の値が #{document}、リクエスト パラメータやリクエスト パスなど、クライアントが制御できるリクエスト スコープの状態に依存する場合です。#{document}は、最初のリクエスト時ではなく、ポストバック時に評価されることに注意してください。

ビューの構築、レンダリング、状態の保存について理解を深めるには、以下の Q&A が役立つ場合があります。

于 2015-12-01T11:54:32.837 に答える