使用 Spring Security 和 Web MVC 保存属于经过身份验证的用户的对象时,应遵循的最佳模式是什么?
我遇到的所有教程都展示了如何对登录的用户进行身份验证,就目前而言,它们没有解释如何使用多个用户及其数据。例如:登录用户正在保存新的博客文章。 Controller 如下所示:
@PostMapping("/blog/save")
public String blogSavePost(@AuthenticationPrincipal CurrentUser currentUser, BlogForm blogForm) {
blogService.save(currentUser, blogForm);
return "redirect:/blog";
}
是否应该将 currentUser
传递给 blogService
,然后服务将其设置在实体 Blog
上(然后将其传递给 BlogRepository
进行保存)?每次保存或编辑时都必须传递这个似乎有点乏味..
编辑对象时怎么样 - 由于正在保存的对象的 id 被传递到 Controller (作为表单对象的一部分的参数),因此它可以被用户更改。服务层应该如何验证所保存的数据是否属于用户?我认为有一个简单的方法可以使用 Spring Security 来处理这个问题,我只是还没有遇到它是什么..
最佳答案
问题 1
完全取决于你。我只需在 Controller 中设置关联,然后再将其传递给服务:
问题 2。
您可以通过在 Controller 中定义绑定(bind)器来防止绑定(bind)某些字段:
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setDisallowedFields("userId");
}
您还可以使用方法级别安全性来防止用户编辑属于他们的实体以外的实体。请参阅此处的示例:
或者,您可以使用网络安全表达式来保护端点的保存/更新/删除请求。
http://docs.spring.io/spring-security/site/docs/current/reference/html/el-access.html#el-access-web
关于java - Spring Security 和 Web MVC : How to save data that belong to a user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43556573/