欢迎光临散文网 会员登陆 & 注册

Spring Security Role 使用 Hierarchy 后遇到的一个判断问题

2022-05-15 14:29 作者:-l0_0l-  | 我要投稿

在了解 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


Spring Security Role 使用 Hierarchy 后遇到的一个判断问题的评论 (共 条)

分享到微博请遵守国家法律