首页 > 解决方案 > 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 用户是管理员。

标签: springspring-mvcsecurityspring-securityspring-security-oauth2

解决方案


好的,经过多次尝试,我终于找到了方法。如果有人感兴趣:@PreAuthorize("hasRole('ADMIN') 或 #userId == principal.userId")

这样,如果您是管理员,您可以获得任何用户的书籍,如果您是用户,则只能获得您自己的书籍。


推荐阅读