Spring 安全性将主体信息与请求参数匹配

Posted

技术标签:

【中文标题】Spring 安全性将主体信息与请求参数匹配【英文标题】:Spring security match Principal info with request param 【发布时间】:2019-01-15 21:53:03 【问题描述】:

所以我试图在没有 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 用户是管理员。

【问题讨论】:

为什么不创建另一个路径,例如 '/my-books` 并注入用户主体? 【参考方案1】:

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

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

【讨论】:

以上是关于Spring 安全性将主体信息与请求参数匹配的主要内容,如果未能解决你的问题,请参考以下文章

单点登录JWT与Spring Security OAuth

Postman第2篇—接口请求与响应

get请求与post,跨域

Spring Boot 2从入门到入坟 | 请求参数处理篇:常用参数注解之@PathVariable

Spring Boot 2从入门到入坟 | 请求参数处理篇:常用参数注解之@PathVariable

Spring Cloud Gateway 动态修改请求参数解决 # URL 编码错误传参问题