Java 我可以使用Spring Security@PreAuthorize检查HTTP头吗?

Java 我可以使用Spring Security@PreAuthorize检查HTTP头吗?,java,spring,rest,spring-mvc,spring-security,Java,Spring,Rest,Spring Mvc,Spring Security,我有一个用Spring编写的RESTAPI,其中包含Spring安全性和Spring引导以及Web启动包。我的一些方法检查JWT令牌: @RequestMapping(value = "/list", method = GET, produces = APPLICATION_JSON_VALUE) public HttpEntity<List<Item>> list(@RequestHeader(name = TOKEN_HEADER) S

我有一个用Spring编写的RESTAPI,其中包含Spring安全性和Spring引导以及Web启动包。我的一些方法检查JWT令牌:

@RequestMapping(value = "/list",
        method = GET,
        produces = APPLICATION_JSON_VALUE)
public HttpEntity<List<Item>> list(@RequestHeader(name = TOKEN_HEADER) String token) {
    // validate token
    // do something
}

令牌包含有关特定用户可以访问的资源的一些信息。如果令牌不包含用户请求的资源或底层数据层中的数据表明用户无权访问它,我将返回HTTP 403。

您试图将身份验证和授权委托给控制器,这不是一个好主意

处理头上的令牌的方法是实现一个过滤器,该过滤器通过令牌封装身份验证和授权,并将登录用户的用户和角色放入会话中

然后,预授权注释会根据需要检查上下文


您可以查看以了解令牌流。

是否复制到此?我已经有了一个过滤器,它使用令牌进行身份验证和授权。但是,筛选器不知道特定用户是否创建了给定的资源。现在我想返回一个ID为的资源:
GET/resource/1
过滤器检查用户是否已登录并有权检索资源。然后,控制器解析请求,并使用对服务的调用检查用户是否是资源ID 1的所有者。如果我把这当作一个过滤器,那么过滤器必须解析请求并调用服务。@Martineteevarga我正在尝试做类似的事情。你找到解决方案了吗?如果找到了,你做了什么?
@RequestMapping(value = "/list",
        method = GET,
        produces = APPLICATION_JSON_VALUE)
@PreAuthorize("myMethod(headers)")
public HttpEntity<List<Item>> list(@RequestHeader(name = TOKEN_HEADER) String token) {
    // do something
}

void myMethod(HttpHeaders headers) {
    // validate token
}