我的问题很简单。如果我执行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
中不存在,则将允许该字段。否则,将不被允许。