Spring Security --- authorizeRequests配置

news/2024/5/18 14:41:47/文章来源:https://blog.csdn.net/weixin_59624686/article/details/130134928

目录

自定义配置类之访问权限

匹配顺序规则

访问控制包含

访问控制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.luyixian.cn/news_show_286004.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 数组、指针、数组指针、指针数组、多级指针、STL-map、结构体 的 初始化 及其 初始化赋值

C 数组、指针、数组指针、指针数组、多级指针、STL-map、结构体 的 初始化 及其 初始化赋值C 数组、指针、数组指针、指针数组、多级指针、STL-map、结构体 的 初始化 及其 初始化赋值C 数组、指针、数组指针、指针数组、多级指针数组一维数组初始化:二维数组初始化…

算法训练Day30:332.重新安排行程 51. N皇后 37. 解数独

文章目录重新安排行程题解[N 皇后](https://leetcode.cn/problems/n-queens/description/)题解解数独题解重新安排行程 CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsHard (47.57%)7650--0 TagsCompanies 给你一份航线列表 tickets ,其…

零基础如何入门网络安全?【2023最新】

前言 最近收到不少关注朋友的私信和留言,大多数都是零基础小友入门网络安全,需要相关资源学习。其实看过的铁粉都知道,之前的文里是有过推荐过的。新来的小友可能不太清楚,这里就系统地叙述一遍。 01.简单了解一下网络安全 说白…

【数据结构与算法篇】时间复杂度与空间复杂度

目录 一、数据结构和算法 1.什么是数据结构? 2.什么是算法? 3.数据结构和算法的重要性 二、算法的时间复杂度和空间复杂度 1.算法效率 2.算法的复杂度 3.复杂度在校招中的考察 4.时间复杂度 5.空间复杂度 6.常见复杂度对比 7.复杂度的OJ练…

射频功率放大器在液体超声声强的光电测量中的应用

实验名称:液体中超声声强的光电测量 研究方向:光电测量 测试目的: 声强是描述声场的基本物理量口,超声效应直接与声强有关。例如在工程技术领域,液体中的声场分布直接影响流场分布口,声强的大小影响着超声波…

ChatGPT 学习 ES lucene 底层写入原理,源码

一直有个疑问“学习最新版lucene 数据写入相关的源码,应该看哪些源码,以什么顺序看(先看什么,后看什么)?” 对于Lucene的数据写入过程,可以分为以下几个阶段 在学习Lucene的数据写入相关的源码…

Nextcloud去掉URL中的index.php以及强制https(Win10子系统WSL)

一、Nextcloud去掉URL中的index.php 1、启用相关模块 cd /var/www/nextcloud #进入程序目录sudo chmod -R 777 .htaccess #设置.htaccess文件权限可读写sudo a2enmod envaudo a2enmod rewrite #启用rewrite模块2、修改nextcloud配置文件 vim /var/www/nextcloud/config/…

<数据结构>NO1.算法的时空复杂度

文章目录🚩算法效率算法复杂度🪅时间复杂度大O的渐进表示法常见的时间复杂度举例🪅空间复杂度大O的渐进表示法常见的空间复杂度举例🗯️常见复杂度对比🗯️🚩算法效率 算法是一个被设计好的,计…

CentOS7.6 磁盘挂载

CentOS7.6 磁盘挂载 目录CentOS7.6 磁盘挂载1.磁盘说明2.磁盘分区步骤1.磁盘说明 1、Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘 2、对于IDE硬盘,驱动器标识符为"hdx",""代表分区,前四个分区用数字…

停车场管理系统文件录入(C++版)

❤️作者主页:微凉秋意 ✅作者简介:后端领域优质创作者🏆,CSDN内容合伙人🏆,阿里云专家博主🏆 文章目录一、案例需求描述1.1、汽车信息模块1.2、普通用户模块1.3、管理员用户模块二、案例分析三…

C++中的引用变量详解

文章目录声明及定义代码引用变量的特点图片解释引用变量的本质引用变量的用途int & 和 const int & 的区别引用变量和宏定义(#define)的区别声明及定义 [const] int& 变量名 右值 注意:[]内的是可选的。即这里的const限定词是可…

香港布局Web3.0 既是金融试探,也是未来战略

香港Web3.0协会成立的消息已在业内刷屏,作为跨业界的非盈利机构,该协会致力于促进Web3.0生态环境的建设,港府特首李家超和北京中央驻港联络办公室部分领导均出席了成立典礼。 李家超在致辞中表示,Web3.0的发展正值黄金起点&#x…

SpringCloud GateWay与Nacos使用

网关就相当于一个内网与外网的出入口,起着 安全、验证的功能,如果没有网关,那么如果需要实现验证的功能,除非 SpringCloud GateWay 作为微服务的网关,起着如下作用 ① 作为所有API接口服务请求的接入点 ② 作为所有后端业务服务…

如何在企业微信中使用低代码工具?

企业微信是一款非常强大的办公应用软件,可以方便地进行企业内部的沟通、协作、管理等工作。虽然企业微信本身并不提供低代码工具,但是可以通过集成第三方的低代码工具来实现在企业微信中的使用。 例如,可以使用低代码平台简道云,…

蓝桥杯之我见

前言 关于蓝桥杯,应该有很多人不知道这是一个什么样的比赛。但是作为一名合格的程序员,就算之前没有参加过蓝桥杯的比赛,或者没听说过蓝桥杯,读完本篇文章再说不知道蓝桥杯,就有点不合适了吧?!那…

Linux驱动之LED驱动

之前学习完了字符设备驱动的大体框架,现在我们就使用这个基本的框架来对硬件进行操作,例如通过指令控制led的状态,编写LED驱动。LED驱动有多种实现方式。 目录 GPIO函数 IO内存映射 混杂设备驱动 GPIO函数 首先加入需要的头文件。 #incl…

为一副通用纸牌设计数据结构

为一副通用纸牌设计数据结构 大家好,我是易安,今天我们来聊一道笔试题,这也是我曾经面试华为时做过的题,今天分享给大家。 题目: 如何设计一个通用的扑克牌数据结构?请解释如何继承它来实现特定的扑克游戏…

如何将本地项目上传到Github的方法步骤

默认:已经安装好了git。 第一步:我们需要先创建一个本地的版本库(其实也就是一个文件夹)。 你可以直接右击新建文件夹,也可以右击打开Git bash命令行窗口通过命令来创建。 第二步:通过命令git init把这个…

【C++】1. 命名空间

文章目录一、命名空间的由来二、命名空间的使用2.1 关键字:namespace2.2 访问命名空间里的标识符2.3 命名空间的特点三、总结一、命名空间的由来 当我们使用c语言编写项目时,可能遇到以下情况: 变量名与某个库函数名重复,导致保…

HTML学习(5)Canvas绘图

文章目录HTML5 CanvasHTML5 内联SVGHTML5 Canvas 使用 Canvas 进行绘图工作&#xff0c;Canvas元素用于在网页上绘制图片。 创建一个Canvas的元素&#xff1a; <canvas id"myCanvas" width"200" height"100"></canvas>但是Canvas…