在Spring中绑定时保护特定字段

Wil*_*ass 9 java spring spring-mvc

我在允许用户编辑个人资料信息的页面上工作.我希望他们能够编辑他们的公共信息,但不允许他们更改系统标志,例如他们的用户类型.

这是用Spring MVC(3.0)实现的.用户对象具有典型字段,例如firstName,lastName,email(都应该是可编辑的)和一个布尔administrator(这不应该是可编辑的.

我的方法看起来像这样:

@RequestMapping(method = RequestMethod.POST)
public String doEdit(
        @ModelAttribute("user") User user,
        BindingResult result,
        ModelMap model)
throws IOException
{
      // validate, blah blah
      // save user object
      // return page

}
Run Code Online (Sandbox Code Playgroud)

我的表单包含的字段firstName,lastName等等,似乎很好地工作.

问题是,如果恶意用户使用参数administrator"true" 发布查询,他们可以在不应该设置此字段时设置该字段.

我知道我可以创建一个单独的"表单"对象,只包含我想要更改的字段并将其用于自动绑定.(复制数据).问题是我有很多地方使用这种技术.(对于用户和其他对象).当我想添加字段时,维护是一件麻烦事.

有没有办法在Spring MVC中使用注释或其他技术将参数列入白名单并防止更改任意域对象属性?

Cos*_*atu 10

DataBinder有两个名为的属性allowedFields,disallowedFields用于定义(dis)允许绑定的内容.只需在您的@InitBinder方法中使用它:

@InitBinder
public void initBinder(WebDataBinder binder) {
    binder.setDisallowedFields("administrator");
}
Run Code Online (Sandbox Code Playgroud)