我在Spring MVC中设置initBinder遇到了一些麻烦。我有一个ModelAttribute,其中有时会显示一个字段。
public class Model {
private String strVal;
private int intVal;
private boolean boolVal; // Only shows in certain situations
}
如何正确设置此initBinder?这就是我所拥有的,但是每当我修改发布数据时,无论我说什么都不允许,我都可以修改此boolVal。我以为我的麻烦是我无法接受想要的捷径。
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setIgnoreUnknownFields(true);
if (binder.objectName() == MODEL) {
binder.setAllowedFields("*");
if (!somePermissionChecks()) {
binder.setDisallowedFields("boolVal");
}
}
}
权限检查返回false,因此对setDisallowedFields进行了调用。问题是我仍然可以通过添加输入或更改另一个字段的名称或将其附加到POST数据来在UI上伪造该值。
有没有一种快速的方法,而不必手动列出所有属性?
最佳答案
绑定程序初始化期间权限检查是否失败?您是否尝试过不使用binder.setAllowedFields("*");
语句?