Spring Security --- authorizeRequests配置

news2024/11/17 15:53:08

目录

自定义配置类之访问权限

匹配顺序规则

访问控制包含

访问控制url匹配

访问控制方法

角色、权限判断

使用注解进行角色权限控制


  • 自定义配置类之访问权限

  • http.authorizeRequests()主要是对url进行访问权限控制
  • 通过这个方法来实现url授权操作
  • 支持链式写法

  • 匹配顺序规则

  • 在所有匹配规则中取所有规则的交集
  • 配置顺序影响了之后授权效果
  • 越是具体的应该放在前面,越是笼统的应该放到后面
  • 访问控制包含

    • 访问控制url匹配
    • 访问控制方法
    • 角色判断
    • 权限判断
  • 访问控制url匹配

  • anyRequest()
  • 表示匹配所有的url请求

  • antMatcher(String regx)
  • 传递一个ant表达式参数,表示匹配所有满足ant表达式的请求
  • ant表达式中特殊字符解释
  • antMatcher(HttpMethod.*, String regx)
  • 传递一个请求方法类型参数加ant表达式参数,表示匹配所有满足ant表达式的指定请求方式的url
  • regexMatchers(String regexPattern)
  • 传递一个参数使用正则表达式进行匹配
  • 和antMatchers()主要的区别就是参数,antMatchers()参数是ant表达式,而regexMatchers()参数是正则表达式
  • 演示案例: 使用正则表达式放行一个名称以demo结尾的js文件,让用户可以匿名访问

  • regexMatchers(HttpMethod.*, String regexPattern)
  • 演示案例: 使用正则表达式放行一个名称以demo结尾的js文件,让用户可以通过get请求匿名访问

  • 访问控制方法

  • 角色、权限判断

  • 预置了两个用户,给用户也设置了权限, 现在用这两个用户来演示一下角色和权限的访问控制

  • hasRole()
  • 演示案列: 具有admin权限的用户才可以访问role.html

  • hasAnyRole()

  • hasAuthority()

  • hasAnyAuthority()

  • access()
  • 上面实现的访问控制的方法都可以使用access()来代替,因为他们本质上都是调用了access()

  • 使用注解进行角色权限控制

  • 首先如果要启动spring security提供的角色权限注解的话,需要在配置类上添加@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)注解
  • 这样才能开启@Secured和@PreAuthorize注解

  • @Secured注解的使用

  • 判断是否具有角色权限,匹配的字符串需要添加前缀“ROLE_角色权限”
  • 作用:在用户向浏览器发送一个请求时会去访问控制器中的方法,然后在访问此控制器中的方法之前会先去UserDetailsService用户细节实现类的实现方法中return的User对象查看是否具有@Secured注解中指定的角色
  • 如果有指定的角色,那么系统允许用户访问此控制器方法,否则,系统不允许访问此控制器方法
  • @PreAuthorize注解的使用

  • 进入方法之前进行角色权限认证
  • 作用:在浏览器发送一个请求后,会访问控制器中的对应的方法,@PreAuthorize注解 会在访问控制器中的方法之前进行权限认证,看看UserDetailsService用户细节实现类中对应的用户有没有相应的权限,如果有那么该用户发送的请求可以进入控制器中对应的方法,如果没有相应的权限,那么用户发送的请求不能进去控制器中对应的方法;
  • @PostAuthorize注解的使用

  • 方法执行之后再判断用户的角色权限
  • 响应结果获取到"in",匹配,说明权限可以访问

  • 响应结果获取到"out",不匹配,说明权限不足, 抛出403异常

  • 作用:在访问控制器中的相关方法之后(方法的return先不访问),进行权限认证,去看看UserDetailsService用户细节实现类中用户是否有对应的权限,如果有的话,那么控制器方法的最后一句return语句会执行,否则,控制器方法的最后一句return语句不会执行;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/419675.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【react全家桶学习】react简介

react是什么? react是用于构建用户界面的JS库,是一个将数据渲染为HTML视图的开源JS库 谁开发的? 由Facebook开发,且开源 为什么要学? 原生JavaScript操作DOM繁琐、效率低 ( DOM-API操作 UI)使用JavaScript直接操作…

Attention注意力机制

加粗样式通俗理解:你会注意什么? 对于一个模型而言(CNN,LSTM),模型本身很难决定什么重要什么不重要,因此注意力机制诞生了。 注意力机制:我们会把焦点聚焦在比较重要的事务上 怎么…

详细聊一聊Android Apk的四代签名

简介 大部分开发者对apk签名还停留在APK v2,对APK v3和APK v4了解很少,而且网上大部分文章讲解的含糊不清,所以根据官网文档重新整理一份。 apk签名从APK v1到APK v2改动很大,是颠覆性的,而APK v3只是对APK v2的一次…

RocketMQ是是如何管理消费进度的?又是如何保证消息成功消费的?

RocketMQ消费者保障 作者: 博学谷狂野架构师GitHub:GitHub地址 (有我精心准备的130本电子书PDF) 只分享干货、不吹水,让我们一起加油!😄 消息确认机制 consumer的每个实例是靠队列分配来决定如何消费消息的…

业务异步离线任务平台思考

目录 一、离线任务平台定义 二、实际开发那种的实现方式分析 三、企业应用与链接分享 (一)具体企业应用举例 (二)离线任务平台相关文章和论文链接 四、开源代码库参考 一、离线任务平台定义 离线任务平台通常是指一种基于云…

基于 Verilog HDL 设计真彩图的灰度处理模块

引言 FPGA比较擅长的是作定点数整数运算,那么对于带有小数部分的乘加运算。一般都选择先扩大若干倍,而后将运算结果缩小若干倍实现。 应用案例,真彩图转灰度图的心理学计算公式: Gray 0.299R 0.587G 0.114B 本文给出具体的…

Spring boot基础学习之(十八):通过shiro框架使用Mybatis实现用户的认证完整的认证流程

在上几篇文章的基础上,实现本次案例 注意:本篇文章的实现代码在几篇文章都已经详细的讲过了,所以在此篇文章,将不再有理论知识的陈述,更过的流程,如何通过代码实现连接数据库进行认证 添加本次案例所需要的…

【并发编程】ConcurrentHashMap源码分析(二)

addCount 统计元素个数 private transient volatile long baseCount; //初始化大小为2,如果竞争激烈,会扩容 2->4 private transient volatile CounterCell[] counterCells;如果竞争不激烈的情况下,直接用cas (baseCount1)如果竞争激烈的情况下,采用…

项目管理的三要素:时间、成本和质量

项目管理的三要素:时间、成本和质量,他们作为衡量一个项目的成功失败的指标,贯穿项目整个过程。 时间: 项目时间管理包括使项目按时完成必须实施的各项过程。 项目计划按照逻辑关系安排计划活动顺序时,需要考虑进度…

C#,码海拾贝(16)——求行列式值的全选主元高斯消去法,《C#数值计算算法编程》源代码升级改进版

1 高斯消去法 数学上,高斯消元法(或译:高斯消去法),是线性代数规划中的一个算法,可用来为线性方程组求解。但其算法十分复杂,不常用于加减消元法,求出矩阵的秩,以及求出…

利好消息不断原油价格大幅走高

​几个OPEC成员国将在年底前将全球产量再削减116万桶/天,这将进一步给央行遏制全球通胀的努力带来负担,但关键是保护该联盟更广泛的产量策略免受政治压力的影响。 华盛顿介入批评了上周日的声明,8个OPEC生产国(包括组织的领导国沙…

Java中jar包的创建和使用

Java中jar包的创建和使用 jar包的基本概念 jar包的全称是java archive。jar包本质就是一种压缩包。在Java开发中一般是用来压缩类的一个包。类似C/C中的静态库和动态库,但是又不完全是。 C/C中的静态库和动态库是对中间文件(*.o)打包成一个…

【电路原理】电路元件基本知识详解

博主简介:努力学习的22级计科生一枚~博主主页: 是瑶瑶子啦所属专栏: 电路理论 前言1.电阻元件2.电容元件3.电感元件4.独立电源4.1:电压源4.2:电流源5.受控电源6.符号补充:7.总结本专栏文章主要总结、归纳电路原理、电路…

数据结构-排序(2)

前言: 上一章节介绍了 排序中的插入排序和选择排序, 分别复盘了插入排序中的直接插入排序和希尔排序以及选择排序中的选择排序和堆排序。今天继续复盘交换排序。 目录 2.3交换排序 2.3.1冒泡排序 2.3.2快速排序 2.3.2快速排序非递归 2.3交换排序 基…

HTML5 <figure> 标签、HTML5 <footer> 标签

HTML5 <figure> 标签 实例 使用 <figure> 元素标记文档中的一个图像&#xff1a; <figure><img src"img_pulpit.jpg" alt"The Pulpit Rock" width"304" height"228"> </figure>尝试一下 浏览器支持 …

在proteus中仿真arduino实现矩阵键盘程序

矩阵键盘是可以解决我们端口缺乏的问题&#xff0c;当然&#xff0c;如果我们使用芯片来实现矩阵键盘的输入端口缺乏的问题将更加划算了&#xff0c;本文暂时不使用芯片来解决问题&#xff0c;而使用纯朴的8根线来实现矩阵键盘&#xff0c;目的是使初学者掌握原理。想了解使用芯…

Lua脚本

目录说明什么是Lua脚本为什么要使用Lua脚本Lua脚本的安装Lua脚本的使用Lua的变量Lua脚本的算术运算符Lua脚本的关系运算符Lua脚本的逻辑运算符Lua脚本不同的操作Lua脚本的函数和标准库Redis整合Lua脚本&#xff08;重点&#xff09;在Java集成Lua在SpringBoot项目中使用Redis集…

前端PC端适配,网页端适配

问题背景 由于我司是使用的大屏&#xff0c;且设计稿尺寸为19201080。但是需要适配各种分辨率&#xff0c; 比如12801024(5:4)、1366768(16&#xff1a;10)、16801050&#xff08;16&#xff1a;10&#xff09;。在尝试了多种方法之后&#xff0c;最终确定主要的适配方法为rem…

【vue3】04-vue基础语法补充及阶段案例

文章目录vue基础语法补充vue的computedvue的watch侦听书籍购物车案例vue基础语法补充 vue的computed computed&#xff1a;用于声明要在组件实例上暴露的计算属性。&#xff08;官方文档描述&#xff09; 我们已经知道&#xff0c;在模板中可以直接通过插值语法显示一些data中…

科学的演变:从笛卡尔到生成式人工智能

编者按&#xff1a;本文主要介绍了科学的演变历史&#xff0c;从笛卡尔到生成式人工智能。文章探讨了数学在验证科学原理中的作用&#xff0c;并介绍了新机器学习工具如何验证新的科学。 文中提到&#xff0c;将生成式人工智能与Excel或iPhone进行比较是低估了这一新技术的潜在…