如何在@PreAuthorize中修复SpEL表达式?

时间:2019-02-02 00:46:47

标签: java spring spring-security spring-security-oauth2

您好,所有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')")正常运行的同时出现了相同的异常情况。

要解决此问题,我应该更改什么?

1 个答案:

答案 0 :(得分:0)

应该是这样的

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

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