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

Jsf 客户端可以更改bean操作方法中EL方法参数的值吗?,jsf,el,viewstate,tampering,method-parameters,Jsf,El,Viewstate,Tampering,Method Parameters,我目前正在根据特定标准筛选文档列表 然后我将这个列表呈现给用户,我有一个 <p:commandButton action="#{controllerBean.downloadDocument(document.id)}" ajax="false" /> 查看呈现的代码,我在任何地方都看不到文档id,但这并不意味着它是以某种方式编码的,可以从客户端解码、更改和重新编码 我对JSF状态处理的理解非常薄弱,但是,如果我错了,请纠正我:从客户端手动更改操作参数值是不可能的,因为即使存储

我目前正在根据特定标准筛选文档列表

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

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

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


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

它存储为JSF组件树中的
MethodExpression
(而不是JSF视图状态!)它在服务器端由相关命令组件触发的表单提交的
INVOKE\u应用程序
阶段进行评估。事实上,它并没有编码为HTML输出,相反,例如
(如果您熟悉PrimeFaces,这也正是
不能在其值中使用EL方法参数,而只能通过嵌套的
使用HTTP请求参数的原因)

唯一的“风险”是当
{document}
的during
INVOKE_应用程序
评估值(间接地)取决于客户端可以控制的某个请求范围的状态,例如请求参数或请求路径。请再次注意,
#{document}
是在回发期间评估的,而不是在初始请求期间

为了更好地了解视图构建、渲染和状态保存,下面的问答可能会有所帮助:


JSF的优势之一。如果使用正确,防止“篡改”是一种内置功能