首页 > 解决方案 > 如何修复 @PreAuthorize 中的 SpEL 表达式?

问题描述

大家好 Spring Security 专家!

我一直在开发许多微服务并面临一个安全问题。

在我的项目中,我通过 JWT 使用身份验证/授权。

谁能回答我什么会导致运行时异常

{
    "timestamp": "2019-02-02T00:40:38.211+0000",
    "status": 500,
    "error": "Internal Server Error",
    "message": "Failed to evaluate expression 'authentication.name == userId'",
    "path": ".../2"
}

在这段代码中:

@PreAuthorize("authentication.name == userId")
@GetMapping("/{userId}")
ResponseEntity<String> get(@PathVariable final String userId);

我也尝试过,@PreAuthorize("principal.username == #userId")但得到了同样的异常,同时@PreAuthorize("hasAuthority('ROLE_COMRADE_MAJOR')")表现正确。

我应该改变什么来解决这个问题?

标签: javaspringspring-securityspring-security-oauth2

解决方案


应该是这样的

@PreAuthorize("#userId == authentication.name")
ResponseEntity<String> get(@Param("userId") String userId);

参见例如https://github.com/spring-projects/spring-security/issues/2376


推荐阅读