客户端可以更改bean操作方法中EL方法参数的值



我目前正在根据特定条件筛选文档列表。

然后我把这个列表呈现给用户,我有一个

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

查看呈现的代码,我在任何地方都看不到文档id,但这并不意味着它是以某种方式编码的,并且可以从客户端解码、更改和重新编码

我对JSF状态处理的理解很弱,但是,如果我错了,请纠正我:从客户端手动更改操作参数值是不可能的,因为即使存储在客户端上,也只有服务器可以解码和编码会话状态,并且参数值存储在那里。我是对的,还是应该在downloadDocument(document.id)中添加一个检查,以确保用户有权下载特定的document.id?不管怎样,我都会在未来添加这张支票,但我想知道这个问题现在有多重要。

它以MethodExpression的形式存储在JSF组件树中(而不是在JSF视图状态下!),并且在由有问题的命令组件触发的表单提交的INVOKE_APPLICATION阶段在服务器端进行评估。事实上,它并没有被编码到HTML输出中,与<f:param>相反(如果你熟悉PrimeFaces,这也是<p:graphicImage>不能通过嵌套的<f:param>处理EL方法参数而只能处理HTTP请求参数的原因)。

唯一的"风险"是#{document}INVOKE_APPLICATION期间的评估值(间接)取决于客户端可以控制的某些请求范围的状态,例如请求参数或请求路径。请再次注意,#{document}是在回发期间评估的,而不是在初始请求期间评估的。

为了更好地理解视图构建、渲染和状态保存,请参阅以下问答;A可能会有所帮助:

  • 什么';视图构建时间是多少
  • ';绑定';JSF中的属性工作?何时以及如何使用

相关内容

  • 没有找到相关文章

最新更新