java - 将类级别 @PreAuthorized 注释与方法级别 @PreAuthorzied 注释一起使用
问题描述
我试图让控制器类上的@PreAuthorized 注释与同一类的方法(端点)上的@PreAuthorized 注释一起工作。该类的概述如下所示:
@RestController
@RequestMapping("/api")
@PreAuthorized("hasRole('CLASS_LEVEL_ROLE')")
public class foo {
@GetMapping("/test")
@PreAuthorized("hasRole('METHOD_LEVEL_ROLE')")
@Timed
public ResponseEntity<String> bar() {
return ResponseEntity.ok().body("entered method successfully");
}
}
目前正在发生的只是方法级别的注释被考虑在内。
理想情况下,只有角色为“CLASS_LEVEL_ROLE”和“METHOD_LEVEL_ROLE”的用户才被允许访问 bar()。
我知道我可以使用
@PreAuthorized("hasRole('CLASS_LEVEL_ROLE') and hasRole('METHOD_LEVEL_ROLE')")
但是我有一些控制器,其中所有端点都必须具有相同的'CLASS_LEVEL_ROLE'
,并且具有通用类注释会更方便。
解决方案
@PreAuthorize 允许类级别的注释。它应该工作的方式是,如果存在方法级别的注释,它将覆盖类级别的注释。你不能把两者结合起来。因此,当方法级别注释不存在时,可以将类级别注释视为后备。
推荐阅读
- codesandbox - CodeSandbox:在控制台中显示代码行
- c - 将 C 数据结构导出到 Grafana 支持的数据库:您的建议?
- memory-management - Blazor webassembly:管理客户端的内存使用情况
- c++ - glDrawArrays 由于某种原因无法正常工作?
- oauth-2.0 - 访问令牌过期时 KeyCloak 返回 Forbidden(403) 响应
- r - 错误:行解析器中的无效多字节字符~
- algorithm - 为什么我们假设斐波那契数列的时间复杂度为 T(n-1)=T(n-2)?
- c++ - 如何使用 use_wallclock_as_timestamps?
- r - 无法使用传单包在 R 中可视化 geojson
- swift - 从 csv 文件中提取数据以放入 UI 表视图