有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`
Spring Security: hasRole vs hasAuthority
在Spring Security中,hasRole和hasAuthority是用来定义访问控制的两个不同的表达式。虽然它们在功能上非常相似,但在使用时有一些关键的区别。
hasRole
hasRole是一个表达式,它期望传入的角色名称不以ROLE_为前缀。Spring Security会自动为你添加这个前缀。例如,如果你想检查用户是否有ADMIN角色,你会这样写:
.hasRole("ADMIN")
Spring Security在内部会将其解释为ROLE_ADMIN。
hasAuthority
hasAuthority表达式则不会添加任何前缀。它期望你传入的权限名称是完整的,如果你的权限名称中包含ROLE_前缀,你需要自己手动添加。例如:
.hasAuthority("ROLE_ADMIN")
主要区别
- 前缀添加:
hasRole自动添加ROLE_前缀,而hasAuthority不添加。 - 灵活性:
hasAuthority可以用来检查非角色的权限(即不以ROLE_开头的权限),而hasRole通常只用于角色检查。
使用场景
- 如果你的权限模型只有角色而没有细粒度的权限,使用
hasRole可能更方便,因为你不需要每次都指定ROLE_前缀。 - 如果你的权限模型包括角色和其他类型的权限,或者你想要更明确地表达你的意图,使用
hasAuthority可能更合适。
示例
// 使用hasRole
.antMatchers("/admin/**").access("hasRole('ADMIN')")
// 使用hasAuthority
.antMatchers("/admin/**").access("hasAuthority('ROLE_ADMIN')")
在实际应用中,选择hasRole还是hasAuthority取决于你的安全需求和角色/权限的设计。两者都是强大的工具,可以帮助你细粒度地控制应用程序的安全性。
本文是原创文章,采用 CC BY-NC-SA 4.0 协议,完整转载请注明来自 小朱
评论
隐私政策
0/500
滚动到此处加载评论...


