Spring Security的角色角色是什么

  

Spring Security的角色角色是什么?这篇文章从源码出发,详细解析了,感兴趣的小伙伴们可以参考借鉴,希望对大家有所帮助只
我们在进行角色权限控制设计时,一般包括账户(用户),角色(角色),权限(当局)这三部分。
1)一个账户一般对应一个或多个角色;
2)一个角色对应多个权限(当局),反过来一个权限也对应多个角色;
3)账户只和角色关联,通过角色,间接和权限产生关系;
4)角色不是固定死的,是能够动态创建的,每个角色具有的权限能够灵活的进行调整。
5)在系统完成详细设计后,有哪些权限就已经确定下来,权限的层级结构和数量,与账户和角色没半点关系,
基于以上的说明,我们从源码的角度来说明Spring Security的账户,角色和权限是怎么一回事。
Spring Security工作流程:通过登录的账户,找到该账户对应的角色/权限,并把自定义的权限集合转换为Spring Security认可的权限集合List这里面如何创建账号,角色,权限,实现用户认证,进行鉴权的细节就不讲了,因为这个不是本篇文章的重点,有兴趣的读者可以看我的视频介绍:https://edu.51cto.com/course/21185.html,里面有详细的如何进行实战型的Spring Security角色权限控制模块的开发,
重点来了,通过应用角色权限控制的应用,看Spring Security如何利用角色和权限的
四种鉴权的方式:
,,,,,,,, hasRole (String角色)
,,,,,,,, hasAnyRole(字符串…角色)
,,,,,,,, hasAuthority (String)
,,,,,,,, hasAnyAuthority(字符串…当局)
在源码类SecurityExpressionRoot。java中,我们看看这四种方式的实现形式:
 Spring Security的角色角色是什么”> <br/>大家从上面的图看出什么端倪没有?,<br/>,,,,,,,, hasRole (String角色),——》hasAnyRole(字符串…角色),——》hasAnyAuthorityName <br/>,,,,,,,, hasAuthority(字符串),——》hasAnyAuthority(字符串…authorities)  --》hasAnyAuthorityName<br/>不管是基于角色,还是基于权限,最后鉴权都落实到hasAnyAuthorityName这个方法上。</p><p>        follow me,我们继续往下刨根,看看hasAnyAuthorityName这个方法里面有些什么,注意上面代码中的调用hasAnyAuthorityName时,传递的参数,一个是<br/><img src=  
另外一个是
Spring Security的角色roles是什么  
对应的都是一个实现方法。

从hasAnyAuthorityName这个方法中,我们可以知道,这是把传进去的一个或多个角色/权限,在登录用户具有的权限中进行查找  
Spring Security的角色roles是什么  
        这里面的大家看到了吧,角色和权限是混合在一起进行鉴权的(题外话,大家看大神们写的代码,注意到其中的var5、var6、var4,这是搞什么?严重不符合命名规范啊)。
那么Spring Security是如何区分集合中的是权限、还是角色呢,我们继续抽丝剥茧,看看该方法中的getRoleWithDefaultPrefix(prefix, role)方法  
Spring Security的角色roles是什么  
Spring Security的角色roles是什么  
看上面的代码清晰明了了吧,说明如下:
        如果传进去的角色名称/权限名称为null,直接返回null;
        如果传进去的角色名称/权限名称不为null,则判断defaultRolePrefix前缀这个参数是否为空和其长度,如果不为空,且长度不为0,则传进的参数为角色名称,那么继续判断其是否是以“ROLE”开始,如果不是,则在名称前添加前缀“ROLE”,并返回新的名称;
        如果不是以上情况,即参数是权限名称或者带有“ROLE_”前缀的角色名称,直接返回传进去的字符串参数。

        看了以上的部分源码解析,我们可以得出什么结论呢(以角色、权限存放在数据库为例):

Spring Security的角色角色是什么