2

托管 bean 中的方法受 JSF 保护?见代码:

托管豆

@ManagedBean
public class My {
    public void test() {
        System.out.println("called");
    }
}

XHTML

<h:form>
    <h:commandButton rendered="true" action="#{my.test}" value="Teste" />
</h:form>

如果按钮未呈现(rendered="false"),可以完成 HTTP POST 请求(就像按钮一样)并调用 test() 方法?

换句话说,JSF 阻止了被篡改的请求对托管 bean 方法的调用?

4

1 回答 1

1

换句话说,JSF 阻止了被篡改的请求对托管 bean 方法的调用?

是的。

renderedJSF在应用请求值阶段重新评估组件的属性。如果是false,那么在UICommand组件的情况下ActionEvent,无论(被篡改的)HTTP 请求参数是否指示正在按下按钮,都不会排队。

JSF 对disabledreadonly属性以及UIInput组件的那些被篡改的请求具有类似的保护措施。并且,在UISelectOne/ UISelectManycomponents 中,JSF 将验证提交的值是否确实是提供的可用选项的一部分。

JSF 也借助视图状态来完成这一切。如果 JSF 是无状态的,那么如果这些属性突然变成请求范围而不是视图范围,那么其中一个或另一个可能会失败的风险会更大。

也可以看看:

于 2015-08-13T14:32:53.483 回答