Spring Security Role 使用 Hierarchy 后遇到的一个判断问题
在了解 Spring Security role 继承的过程中,因为想使用自定义的 Web Security Expression
取代 @PreAuthorize
进行 role 判断, 发现 HttpServletRequest.isUserInRole
不能判断出 role 的继承关系。
网上搜索了一圈,没发现有人遇到这个问题,不知是否搜索引擎的问题,亦或都用 Shiro 实现访问控制?
总之,当前能想到的就:
获取 RoleHierarchy
中 role 的继承关系,然后自行判断。
但这样又引出另一个问题,怎么获取 role prefix 。
又是比较冷门的问题。。。
之后,找到了两种方法:
SimpleAttributes2GrantedAuthoritiesMapper.getGrantedAuthorities
获取到的权限加了前缀设置
GrantedAuthorityDefaults
Bean ,自定义前缀
不过不知道是否对 Spring 了解得不多,感觉这两种方法都不怎么靠谱。
最后列出两种方法判断 role 的代码。
1. SimpleAttributes2GrantedAuthoritiesMapper
2. GrantedAuthorityDefaults
通过设置 GrantedAuthorityDefaults
修改 role prefix ,可能修改不完全:
User.roles
中固定了 prefix ,可以用User.authorities
代替ROLE_ANONYMOUS
是一个固定值
代码1 application.yaml
代码2 MyConfiguration.java
代码3 TestService.java
代码4 CustomUserDetailService.java