gpt4 book ai didi

java - 在 Spring 中绑定(bind)时保护特定字段

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:18:00 33 4
gpt4 key购买 nike

我正在开发允许用户编辑个人资料信息的页面。我希望他们能够编辑他们的公共(public)信息,但不允许他们更改系统标志,例如他们的用户类型。

这是用 Spring MVC (3.0) 实现的。 User 对象具有典型的字段,例如 firstNamelastNameemail(所有这些都应该是可编辑的)和一个 boolean 值 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

}

我的表单包含字段 firstNamelastName 等并且看起来工作正常。

问题是,如果恶意用户将参数 administrator 设置为“true”,他们可以在不应该设置此字段的情况下发布查询。

我知道我可以创建一个单独的“表单”对象,其中仅包含我想要更改的字段并将其用于自动绑定(bind)。 (数据的副本)。问题是我有很多地方使用这种技术。 (对于用户和其他对象)。当我想添加字段时,维护起来会很麻烦。

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

最佳答案

DataBinder 有两个名为 allowedFieldsdisallowedFields 的属性,它们定义允许(禁止)绑定(bind)的内容。只需在您的 @InitBinder 方法中使用它:

@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("administrator");
}

关于java - 在 Spring 中绑定(bind)时保护特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5022797/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com