基于方法的权限管理实现
创始人
2025-05-30 10:52:50
0

实现步骤

  1. 实现UserDetails,重写getAuthorities方法。
    public class LoginUser implements UserDetails {/*** 角色集合*/private Set roles;@JSONField(serialize = false)private List authorities;@Overridepublic Collection getAuthorities() {if (Objects.nonNull(this.authorities)) {return this.authorities;}authorities = this.roles.stream().map(role -> new SimpleGrantedAuthority("ROLE_" + role)).collect(Collectors.toList());return authorities;}...
    }
    
  2. 在 SpringSecurity 的配置类上添加注解@EnableGlobalMethodSecurity
    @Configuration
    @EnableGlobalMethodSecurity(prePostEnabled = true)
    public class SecurityConfig extends WebSecurityConfigurerAdapter {...
    }
    
  3. 在需要权限管理的方法上添加注解PreAuthorize,本文使用@hasRole在方法访问前进行角色校验。
    @GetMapping("my_info")
    @PreAuthorize("hasRole('admin')")
    public Result getMyInfo() {User user = userService.getMyInfo();return Result.success(user);
    }
    

流程分析

  1. 进行角色校验时,进入到SecurityExpressionRoothasAnyAuthorityName方法中。
    在这里插入图片描述
  2. 使用getAuthoritySet方法获取当前身份验证信息的角色列表,主要代码如下。
    if (this.roles == null) {Collection userAuthorities = this.authentication.getAuthorities();...// 遍历userAuthorities,通过 GrantedAuthority 的 getAuthority 获取角色字符串,并添加到 set 集合中this.roles = AuthorityUtils.authorityListToSet(userAuthorities);
    }
    return this.roles;
    
  3. 遍历@hasRole中的角色(本文中只有 admin),如果当前登录信息的角色列表roleSet包含该角色,则通过校验。
    注意:校验时,会自动给 hasRole 中的角色添加默认前缀 ROLE_,所以在重写 getAuthorities 时需要添加上对应前缀

相关内容

热门资讯

原创 中... 据中国青年报报道,近日,中国四艘海警船编队进入钓鱼岛海域进行常规巡航,依照既定的维权程序,船队在海域...
原创 特... 2025年11月9日,美国总统特朗普在自己的社交平台TruthSocial上宣布,他提名约翰·科尔担...
top等级胡瑾刑事律师团队:死... 在刑事法律领域,辩护律师的专业能力与经验直接关乎当事人的合法权益能否得到充分保障。随着法治建设的深入...
霸王茶姬90后创始人将成常州女... 来源:一波说传承有道 近日,一场即将举行的婚礼悄然成为财经圈与大众舆论场共同关注的焦点。 一张流传于...
常州法院2025年前三季度调解... 调解结案16474件、调解成功率24.08%——这是2025年前三季度常州法院交出的司法成绩单。通过...
安徽省政协研究室副主任陈鑫已任... 据铜陵市政府官网消息,11月20日上午,市委举行理论学习中心组学习会议,邀请省委社会工作部副部长高维...
原创 联... 据光明网报道,11月19日,在联合国大会的讨论中,日本企图争取成为安理会常任理事国的梦想再次破灭,令...
南部关于全县规范法律咨询服务机... 一、专项行动时间 自即日起至2025年12月。 二、举报受理范围 社会各界反映强烈的某些法律咨询服务...
“男子持刀入室盗窃”视频引发关... 近日,一段疑似“小偷”入室盗窃被业主家中监控拍下的视频在网上引发关注。11月21日晚,“翠屏公安”微...