java - Spring Security 和 Web MVC : How to save data that belong to a user?

标签 java spring spring-mvc spring-security

使用 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");
}

您还可以使用方法级别安全性来防止用户编辑属于他们的实体以外的实体。请参阅此处的示例:

Spring Security in conjuction with Spring repositories to secure and authenticate various parts of a website

或者,您可以使用网络安全表达式来保护端点的保存/更新/删除请求。

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/

相关文章:

java - Retrofit 2.0怎么删除?

java - Spring AOP 关于注解 Controller 的建议

java - 使用 spring mvc 跟踪多个相关的输入框

java - Spring @Controller 和自定义 MethodNameResolver

java - spring mvc中上传下载xlsx文件

java - 我的应用程序无法启动 Activity ?

java - 即使在转换和扫描 nextDouble 后也不是数字错误。 (Java)请帮忙?

java - 在Java(REST api)中,您如何指定位于同一路径的2个资源,以便执行取决于客户端提供的版本?

java - 在应用程序范围内设置一个变量,以便在 session 之间共享

java - 为什么通过 Spring 加载 log4j2.xml 会为 log4j1 类抛出 NoClassDefFoundError?