我的问题很简单。如果我执行setAllowFields(),Spring是否会自动禁止其他对象?

同样的问题,如果我使用setDisallowFields(),是否允许其他字段?

我认为没有,但是,有人对此有所经历吗?

最佳答案

看一下setAllowedFields的JavaDoc:


  “注册应允许进行绑定的字段。默认为所有字段。例如,请限制此设置,以避免不必要的修改,
  绑定HTTP请求参数时恶意用户。”


这意味着默认情况下所有字段都是允许的。如果不想允许所有字段,则可以在此方法中指定允许的字段。

对于setDisallowedFields同样:


  “注册不应允许绑定的字段。默认为无。例如,将字段标记为不允许以避免不必要的字段
  绑定HTTP请求时被恶意用户修改
  参数。”


这意味着默认情况下没有字段是不允许的。如果要禁止某些字段,则可以在此方法中指定禁止的字段。



因此,您的问题的答案是setAllowedFields()将自动禁止未指定的字段,但setDisallowedFields()不会自动允许未指定的字段(除非您也未在setAllowedFields()中包括它们)。

为了支持我的答案,让我包括Spring的isAllowed实现:

protected boolean isAllowed(String field) {
    String[] allowed = getAllowedFields();
    String[] disallowed = getDisallowedFields();
    return ((ObjectUtils.isEmpty(allowed) || PatternMatchUtils.simpleMatch(allowed, field)) &&
            (ObjectUtils.isEmpty(disallowed) || !PatternMatchUtils.simpleMatch(disallowed, field)));
}


您可以清楚地看到,如果allowedFields中存在一个字段,而disallowedFields中不存在,则将允许该字段。否则,将不被允许。

08-15 19:42