Spring security 中的hasAuthority()和hasRole() 有啥区别?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring security 中的hasAuthority()和hasRole() 有啥区别?相关的知识,希望对你有一定的参考价值。

既然返回的User对象(UserDetails的实现类)的第三个参数是一个 集合 Collection<? extends GrantedAuthority> authorities,且集合里的泛型是GrantedAuthority接口,我都放实现类new SimpleGrantedAuthority(???)。???的字符串,我又放角色的字符串和权限的字符串,那框架怎么能区分那几个字符串是权限哪几个是角色呢?
既然分不出来那为什么会有两个has方法??

Role与权限的字符串是不同的。Role的字符串必须以:Role_开头
所以权限与Role是可以区分开来的。追问

原来因此,集合里有ROLE_前缀的就是角色,没有就是权限,如果我不用这个前缀,是不是会报错?那权限应该就没这个要求把,

追答

权限没有这个要求。这个你在用HttpSecurity进行配置的之后,看一下对应配置源码就知道了。很简单,不是那种很晦涩的代码。

还有一点要说明,以免产生误解,角色的开头“ROLE_”,是由框架进行插入的,用户并不需要手动插入,如果手动插入ROLE_,在进行hasRole()判断时,反而会报错。错误信息会提示你,角色的ROLE_,由框架自行插入。

参考技术A 一个是角色一个是权限 相比之下权限更灵活

Spring Security入门(3-8)Spring Security获取session中的UserDetail

 

以上是关于Spring security 中的hasAuthority()和hasRole() 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

spring security 3 中的@Secured 和@PreAuthorize 有啥区别?

spring-security-oauth2中的HttpSecurity配置问题

spring-security-oauth中的JdbcApprovalStore(ApprovalStore)有啥用?

如何使用 Spring Security 管理 Spring Boot 中的会话?

Spring Security系列教程解决Spring Security环境中的跨域问题

Maven Repository 上 4.1.1 中的 spring-security-web 在哪里?