Spring Security Role 使用 Hierarchy 后遇到的一個判斷問題
在了解 Spring Security role 繼承的過程中,因為想使用自定義的 Web Security Expression
取代 @PreAuthorize
進(jìn)行 role 判斷, 發(fā)現(xiàn) HttpServletRequest.isUserInRole
不能判斷出 role 的繼承關(guān)系。
網(wǎng)上搜索了一圈,沒發(fā)現(xiàn)有人遇到這個問題,不知是否搜索引擎的問題,亦或都用 Shiro 實現(xiàn)訪問控制?
總之,當(dāng)前能想到的就:
獲取 RoleHierarchy
中 role 的繼承關(guān)系,然后自行判斷。
但這樣又引出另一個問題,怎么獲取 role prefix 。
又是比較冷門的問題。。。
之后,找到了兩種方法:
SimpleAttributes2GrantedAuthoritiesMapper.getGrantedAuthorities
獲取到的權(quán)限加了前綴設(shè)置
GrantedAuthorityDefaults
Bean ,自定義前綴
不過不知道是否對 Spring 了解得不多,感覺這兩種方法都不怎么靠譜。
最后列出兩種方法判斷 role 的代碼。
1. SimpleAttributes2GrantedAuthoritiesMapper
2. GrantedAuthorityDefaults
通過設(shè)置 GrantedAuthorityDefaults
修改 role prefix ,可能修改不完全:
User.roles
中固定了 prefix ,可以用User.authorities
代替ROLE_ANONYMOUS
是一個固定值
代碼1? application.yaml
代碼2? MyConfiguration.java
代碼3? TestService.java
代碼4? CustomUserDetailService.java