Java 如何在Spring中只允许用户修改自己的REST调用?

Java 如何在Spring中只允许用户修改自己的REST调用?,java,spring,spring-boot,spring-mvc,spring-security,Java,Spring,Spring Boot,Spring Mvc,Spring Security,我有 我知道我可以使用@PreAuthorize来保护该方法,具体取决于您的角色。但是我只允许用户自己编辑这个API调用。如何做到这一点?在@PreAuthorize中,可以使用SpEL访问输入参数的属性。它还提供了一个内置表达式authentication,用于从当前SecurityContext访问authentication实例(以及一个快捷方式principal,用于访问authentication.getPrincipal()) 对于默认的JDBC身份验证,主要是不存储用户id的Use

我有


我知道我可以使用@PreAuthorize来保护该方法,具体取决于您的角色。但是我只允许用户自己编辑这个API调用。如何做到这一点?

@PreAuthorize
中,可以使用SpEL访问输入参数的属性。它还提供了一个内置表达式
authentication
,用于从当前
SecurityContext
访问
authentication
实例(以及一个快捷方式
principal
,用于访问
authentication.getPrincipal()

对于默认的JDBC身份验证,主要是不存储用户id的
UserDetails
实例。因此,我建议您对其进行自定义,以包含用户id。在此之后,您可以执行以下操作:

@PutMapping(“/users/{id}”)
@响应状态(HttpStatus.ACCEPTED)
@预授权(“updateUser.userId==principal.userId”)
公共用户updateUser(@PathVariable(“id”)长用户id,@RequestBody用户updateUser){
}

这是答案,谢谢。我不知道为什么我的问题总是被否决?我也不确定。似乎有人对你的问题投了反对票,我不知道他为什么投反对票。。。。
@PutMapping("/users/{id}")
@ResponseStatus(HttpStatus.ACCEPTED)
public User updateUser(@PathVariable("id") Long userId, @RequestBody User updatedUser){
...
}