| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> Spring Security 4 中的 hasRole 和 hasAuthority 差异引发的思考 -> 正文阅读 |
|
[Java知识库]Spring Security 4 中的 hasRole 和 hasAuthority 差异引发的思考 |
前言:在使用 Spring Security 的时候我们必然会使用到如下两种访问权限配置中的一种:
那么这两种配置有什么区别呢?今天就来聊一聊这个问题。 一、源码分析:hasAuthority 实现如下:
hasRole 实现如下:
综上:使用 hasAuthority 显得更加方便,不用考虑要不要加 ROLE_ 前缀,数据库权限字段的值是什么样就是什么样。而 hasRole 则不同,代码里如果写的是 root,框架会自动加上 ROLE_ 前缀,所以数据库就必须是 ROLE_root。 看起来 那么 Spring Security 设计者为什么要弄两个功能几乎一模一样的东西呢? authority 描述的的是一个具体的权限,例如针对某一项数据的查询或者删除权限,它是一个 permission,例如 read_employee、delete_employee、update_employee 之类的,这些都是具体的权限,相信大家都能理解。 role 则是一个 permission 的集合,它的命名约定就是以 ROLE_ 开始,例如我们定义的 ROLE 是 ROLE_ADMIN、ROLE_USER 等等。我们在 Spring Security 中的很多地方都能看到对 Role 的特殊处理,权限管理的投票器与表决机制中,RoleVoter 在处理 Role 时会自动添加 ROLE_ 前缀。 在项目中,我们可以将用户和角色关联,角色和权限关联,权限和资源关联。 github 上 Spring Security 的 issue 有人提出了类似问题:https://github.com/spring-projects/spring-security/issues/4912 从作者对这个问题的回复中,可以得出:
从作者的回复中我们也可以看出来,hasAuthority 和 hasRole 功能上没什么区别,设计层面上确实是两个不同的东西。 比较 Spring Security 几次大版本的更新,可以得出在 Spring Security 4 之前,hasAuthority 和 hasRole 几乎是一模一样的,没有 Spring Security 3 迁移至 Spring Security 4 更新说明文档如下:https://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html#m3to4-role-prefixing |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 21:04:22- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |