我在Spring中编写了一个REST API,其中Spring Security和Spring Boot使用Web Started包。我的方法很少检查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
}
是否可以将令牌检查移动到可通过@PreAuthorize
注释调用的方法?类似的东西:
@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
}
令牌包含有关特定用户可以访问的资源的一些信息。如果令牌不包含用户请求的资源或底层数据层中的数据表明用户无法访问它,我将返回HTTP 403。
答案 0 :(得分:1)
您正在尝试将身份验证和授权委派给控制器,这不是一个好主意。
在标头上处理令牌的方法是实现一个过滤器,该过滤器通过令牌封装认证和授权,并将用户和记录用户的角色放入会话中。
然后预授权注释会根据需要检查上下文。
您可以看到https://jwt.io/了解令牌流量。