Java 春季DataBinder中setAllowedFields和setDisallowedFields方法的影响
我的问题很简单。如果我执行一个Java 春季DataBinder中setAllowedFields和setDisallowedFields方法的影响,java,spring,spring-mvc,Java,Spring,Spring Mvc,我的问题很简单。如果我执行一个setAllowFields(),Spring是否会自动禁止其他操作 同样的问题,如果我使用setDisallowFields(),是否允许其他字段 我想没有,但是,有人有过这样的经历吗 看一下JavaDoc: “注册应允许绑定的字段。默认值为“所有字段”。例如,对其进行限制以避免不必要的修改。” 绑定HTTP请求参数时存在恶意用户。“ 这意味着默认情况下允许所有字段。如果不希望允许所有字段,则可以在此方法中指定允许的字段 与此类似,对于: “注册不允许绑定的字段。
setAllowFields()
,Spring是否会自动禁止其他操作
同样的问题,如果我使用setDisallowFields()
,是否允许其他字段
我想没有,但是,有人有过这样的经历吗 看一下JavaDoc: “注册应允许绑定的字段。默认值为“所有字段”。例如,对其进行限制以避免不必要的修改。” 绑定HTTP请求参数时存在恶意用户。“ 这意味着默认情况下允许所有字段。如果不希望允许所有字段,则可以在此方法中指定允许的字段 与此类似,对于: “注册不允许绑定的字段。默认值为无。例如,将字段标记为不允许,以避免不需要的绑定。” 绑定HTTP请求时恶意用户的修改 参数。” 这意味着默认情况下不允许任何字段。如果要禁止某些字段,则可以在此方法中指定不允许的字段
因此,您的问题的答案是
setAllowedFields()
将自动禁止未指定的字段,但是setDisallowedFields()
将不会自动允许未指定的字段(除非您没有将它们也包括在setAllowedFields()
中)
为了支持我的回答,让我将Spring的以下实现包括在内:
您可以清楚地看到,如果一个字段存在于
允许的字段中,而不存在于不允许的字段中,那么它将被允许。否则,它将不被允许。请查看以下内容的JavaDoc:
“注册应允许绑定的字段。默认值为“所有字段”。例如,对其进行限制以避免不必要的修改。”
绑定HTTP请求参数时存在恶意用户。“
这意味着默认情况下允许所有字段。如果不希望允许所有字段,则可以在此方法中指定允许的字段
与此类似,对于:
“注册不允许绑定的字段。默认值为无。例如,将字段标记为不允许,以避免不需要的绑定。”
绑定HTTP请求时恶意用户的修改
参数。”
这意味着默认情况下不允许任何字段。如果要禁止某些字段,则可以在此方法中指定不允许的字段
因此,您的问题的答案是setAllowedFields()
将自动禁止未指定的字段,但是setDisallowedFields()
将不会自动允许未指定的字段(除非您没有将它们也包括在setAllowedFields()
中)
为了支持我的回答,让我将Spring的以下实现包括在内:
您可以清楚地看到,如果一个字段存在于允许的字段中,而不存在于不允许的字段中,那么它将被允许。否则,这是不允许的。谢谢@mushif ali nawaz。这是我所期望的,但需要一些确认(真的,由于时间不够,我没有阅读spring的源代码实现)@SPoint不客气。如果您感到困惑,应该始终阅读JavaDoc和实现。它也帮了我很多!谢谢@mushif ali nawaz。这是我所期望的,但需要一些确认(真的,由于时间不够,我没有阅读spring的源代码实现)@SPoint不客气。如果您感到困惑,应该始终阅读JavaDoc和实现。它也帮了我很多!
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)));
}