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 安全性将主体信息与请求参数匹配的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 2从入门到入坟 | 请求参数处理篇:常用参数注解之@PathVariable