| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> SpringSecurity系列之授权与注解 -> 正文阅读 |
|
[开发测试]SpringSecurity系列之授权与注解 |
SpringSecurity系列之授权与注解本文中所使用的技术栈如下: 本文中的代码将基于上文[SpringSecurity系列之基于数据库认证] 一、基于配置类的权限控制1.修改SpringSecurity配置类重写configure(HttpSecurity http) 方法,给用户访问的URL中的路径进行权限限制,限定只有该角色或者权限的用户才能够进行访问。
上述代码中所示,匹配/test-user的路径必须有user角色才能够访问,匹配 /test-admin 的路径必须有admin角色才能够访问,.anyRequest().authenticated(); 表示其他的任何请求只需登录即可访问。 2.修改UserDetailsService实现类进行用户授权而用户的授权我们在UserDetailsService实现类中设置用户的权限/角色,代码如下:
代码中构造UserDetails对象时调用的roles方法就是给该登录用户设置admin角色。 3.创建角色对应的接口我们创建两个两个匹配路径的接口用于测试角色授权
4.测试标题权限访问测试结果如下: 如上当我们访问/test-user接口时,报403异常,表示我们没有访问该接口的权限,因为我们只有admin角色,而没有设置user角色。 5.自定义403无权访问页面在static目录下创建一个403.html文件,内容如下:
在SpringSecurity配置类中添加自定义403访问页面的路径
如图中代码,接下来我们访问/test-user接口,结果如下: 二、基于注解的权限控制基于注解的权限控制比较简单,我们只需要在接口方法上添加权限注解,并开启注解配置即可。 1.@Secured注解的使用使用该注解做权限控制需要开启如下配置:
在SpringSecurity配置类中或者SpringBoot启动类上添加 @EnableGlobalMethodSecurity注解,并设置securedEnabled属性值为ture 表示开启@Secured注解的使用。 创建一个接口并添加@Secured注解控制接口的访问权限,代码如下:
@Secured注解中添加字符串数组,每一个字符串数组代码一个角色,角色必须以ROLE_开头。
访问结果如下: 2.@PreAuthorize注解的使用使用该注解同样需要开启配置@EnableGlobalMethodSecurity注解,不过是需要设置prePostEnabled属性为true。
创建一个接口并添加@PreAuthorize注解
在该注解中需要添加的是角色权限的表达式,以现在用户访问的权限。 在@PreAuthority注解中角色可以不用添加ROLE_前缀,系统将会自动帮我们添加前缀
使用如上代码也可完成admin角色控制接口 其他表达式:
如上代码给用户添加访问权限,通过调用authorities方法,设置访问权限。 警告:roles()和authorities()只能生效一个,后调用的会覆盖之前调用的权限,如上将roles()注释掉,即使不注释掉改方法,也无法使其生效。
3.@PostAuthorize注解的使用使用方式与第二点相同,区别在于该注解的权限校验是进入方法之后,在返回结果之前进行校验。 注解中的SpEL表达式参考 SecurityExpressionRoot 类中的方法。 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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/18 2:24:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |