gpt4 book ai didi

java - Spring MVC + hibernate : Partial model update from browser

转载 作者:行者123 更新时间:2023-12-04 19:12:04 26 4
gpt4 key购买 nike

当只显示 Spring MVC 模型 bean 的一部分时,有没有办法只在模型中更新从浏览器返回的内容?

假设我们有一个 User 类(当然,在这个例子中只有公共(public)属性):

public class User {
public String firstName;
public String lastName;
public String email;
public Date subscriptionExpiration;
}

现在,我将前三个属性显示为 JSP 中的输入字段,并希望相应地更新数据库中的对象。应该只更新这 3 个参数,而不是第四个。实现这一目标的一种方法是
@RequestMapping("/user/{userId}", method=RequestMethod.POST)
public String saveChanges(@PathVariable userId, User user, Model model) {
User oldUser = User.loadFromDB(userId);
oldUser.firstName = user.firstName;
oldUser.lastName = user.lastName;
oldUser.email = user.email;
oldUser.saveToDB();

model.addAttribute("user", oldUser);
}

但这意味着硬编码所有可能改变的属性,我不太喜欢。

有没有办法根据允许用户更改的内容来确定要更新哪些字段?该机制应该比仅仅假设请求参数中的所有内容都可以更改更聪明,否则任何精明的用户都可以手动将其他字段注入(inject)请求中。

在我看来,使用 @Entity(dynamicUpdate=true) 也不能解决问题,因为我没有将整个 User 对象返回到请求中,这样做会打开许多​​安全漏洞。

我错过了 Spring 中的一个不错的功能,还是有其他方法可以从概念上解决这个问题?非常感谢任何提示!

最佳答案

this question了解如何使用@InitBinder 来允许/防止某些模型字段被Spring 绑定(bind)以请求参数。这允许确保 subscriptionExpiration不能通过注入(inject)请求参数来修改。

the documentation了解如何在方法和方法参数上使用@ModelAttribute 注解在调用@RequestMapping 方法之前从数据库加载用户并将其添加到模型中,以及在调用@RequestMapping 方法时使用请求参数填充该用户.这允许从数据库中获取用户并让 Spring 使用来自请求的 ne 值填充它。您所要做的就是验证用户的新状态并将其保存到数据库中。

关于java - Spring MVC + hibernate : Partial model update from browser,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006517/

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