java - 如何只允许用户修改自己在 Spring 中调用 REST?
问题描述
我有
@PutMapping("/users/{id}")
@ResponseStatus(HttpStatus.ACCEPTED)
public User updateUser(@PathVariable("id") Long userId, @RequestBody User updatedUser){
...
}
我知道我可以使用 @PreAuthorize 来保护方法,具体取决于您的角色。但我只想让这个 API 调用只供用户编辑自己使用。如何才能做到这一点?
解决方案
在 中@PreAuthorize
,您可以使用 SpEL 来访问输入参数的属性。它还提供了一个内置表达式来authentication
从当前的.Authentication
principal
Authentication.getPrincipal()
SecurityContext
对于默认的 JDBC 身份验证,主体是UserDetails
不存储用户 ID 的实例。因此,我建议您对其进行自定义以包含用户 ID。之后,您可以执行以下操作:
@PutMapping("/users/{id}")
@ResponseStatus(HttpStatus.ACCEPTED)
@PreAuthorize("#updatedUser.userId == principal.userId")
public User updateUser(@PathVariable("id") Long userId, @RequestBody User updatedUser){
}
推荐阅读
- c# - 切换当前角色 - .NET Core Identity
- r - 在R中计算3D多边形的表面积
- javascript - JavaScript Fetch API - 将输出保存为对象
- c++ - 为什么 GDB 会尝试列出不存在的标头?
- javascript - VueJS 动态样式绑定?
- c - 字符串似乎在 C 中使用结构消失了
- javascript - 禁用移动设备的右键单击(IOS 和 ANDROID)
- excel - 如何在 VBA 中传递不确定数量的布尔参数 ByRef
- deep-learning - Flux.jl 将变量限制在 0 和 1 之间
- python - 修复保存图像中的图形标签