使用SpringSecurity设置角色和权限的注意事项有哪些(springsecurity,开发技术)

时间:2024-05-06 20:24:38 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    %E4%BD%BF%E7%94%A8SpringSecurity%E8%AE%BE%E7%BD%AE%E8%A7%92%E8%89%B2%E5%92%8C%E6%9D%83%E9%99%90%E7%9A%84%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9%E6%9C%89%E5%93%AA%E4%BA%9B

在UserDetailsService的loadUserByUsername方法里去构建当前登陆的用户时,你可以选择两种授权方法,即角色授权和权限授权,对应使用的代码是hasRole和hasAuthority,而这两种方式在设置时也有不同,下面介绍一下:

角色授权:授权代码需要加ROLE_前缀,controller上使用时不要加前缀

权限授权:设置和使用时,名称保持一至即可

上面使用了两种授权方法,大家可以参考。

网上很多关于hasRole和hasAuthority的文章,很多都说二者没有区别,但我认为,这是spring设计者的考虑,两种性质完成独立的东西,不存在任何关系,一个是用做角色控制,一个是操作权限的控制,二者也并不矛盾。

permitAll永远返回true

denyAll永远返回false

anonymous当前用户是anonymous时返回true

rememberMe当前用户是rememberMe用户时返回true

authenticated当前用户不是anonymous时返回true

fullAuthenticated当前用户既不是anonymous也不是rememberMe用户时返回true

hasRole(role)用户拥有指定的角色权限时返回true

hasAnyRole([role1,role2])用户拥有任意一个指定的角色权限时返回true

hasAuthority(authority)用户拥有指定的权限时返回true

hasAnyAuthority([authority1,authority2])用户拥有任意一个指定的权限时返回true

hasIpAddress('192.168.1.0')请求发送的Ip匹配时返回true

看到上述的表达式,应该能发现一些问题,在Security中,似乎并没有严格区分角色和权限,

如果没有角色和权限的区别,只需要hasRole()函数就够了, hasAuthority()是做什么用的?

答:区别就是,hasRole()的权限名称需要用 "ROLE_" 开头,而hasAuthority()不需要,而且,这就是全部的区别。

在通常的系统设计中,我们区分角色和权限,但是,判断 “用户是不是管理员”,和判断 “是否拥有管理员权限”,在代码逻辑上,其实是完全一致的,角色是一种权限的象征,可以看做是权限的一种。因此,不区分角色和权限,本身就是合理的做法。

如果撇开别的问题不谈,只考虑权限的问题,我们可以将角色视为权限的一种,但是,角色是用户的固有属性,在用户管理上还是非常有必要的,在Security4中,处理“角色”(如RoleVoter、hasRole表达式等)的代码总是会添加ROLE_前缀,它更加方便开发者从两个不同的维度去设计权限。

本文:使用SpringSecurity设置角色和权限的注意事项有哪些的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:在VMware虚拟机里如何安装Linux操作系统下一篇:

2 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18