java - 如何修复 @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')")
表现正确。
我应该改变什么来解决这个问题?
解决方案
应该是这样的
@PreAuthorize("#userId == authentication.name")
ResponseEntity<String> get(@Param("userId") String userId);
参见例如https://github.com/spring-projects/spring-security/issues/2376
推荐阅读
- sql - Can you have multiple select statemets on a single table then join them?
- python - 用作共享数据的函数集合的类的最佳实践
- php - 将 pdf 附件添加到 WooCommerce 完成的订单电子邮件通知
- java - 如何使用 OpenJPA Maven 插件进行测试
- database - 按没有行标识符的块迭代 DB2 表
- oracle - 在 WHERE 子句中使用日期参数的正确方法是什么
- django - 无法获取包含 js 文件
- c# - 如何检测图像是否只有错误的 EXIF 或图像是否应该旋转?
- c# - 构建后第一个程序调用控制台非常慢
- php - 如何在 php 模型中选择“喜欢”查询?