spring - Spring 安全性将主体信息与请求参数匹配
问题描述
所以我试图验证我的端点没有 IF 之类的东西,只有 PreFilter 和我基本上有以下
@GetMapping(value = "/books/{userId}")
@PreFilter("hasRole('ADMIN') or principal.userId == pathVar.userId")
public List<Books> getBooks(@PathVariable("userId" String userId) {
//do sth
}
我的问题是让 PreFilter 工作,或者实际上将经过身份验证的主体中的 userId 与路径变量匹配,以便每个用户只能请求自己的书籍。
是的,我知道我可以删除路径变量并在方法内执行 principal.getUserId() ,但这意味着我需要一个 if 用户是管理员。
解决方案
好的,经过多次尝试,我终于找到了方法。如果有人感兴趣:@PreAuthorize("hasRole('ADMIN') 或 #userId == principal.userId")
这样,如果您是管理员,您可以获得任何用户的书籍,如果您是用户,则只能获得您自己的书籍。
推荐阅读
- mysql - 如何在centos 7上恢复新数据库中的mysql数据库文件
- angular - Angular HTTP 请求错误:“发布有效请求”
- wpf - 拦截 Xamarin 表单 WPF 中的后退按钮
- sql - Oracle - 禁用大规模更新
- lapack - 使用 Lapack 子程序执行 Fortran 文件(程序退出代码:127)
- windows - 从批处理文件显示气球通知
- sql-server - 如何汇总交易数据以进行报告?(SQL 服务器)
- javascript - 打开多个模式重用相同的代码
- azure - 如何使用 ARM 模板部署现有文件很少的 Azure VM?
- mysql - #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册