当前位置: 首页 > news >正文

SpringSecurity如何正确的设置白名单

在SpringSecurity中,往往需要对部分接口白名单访问,而大部分在使用Security中就有一个误区,那就是免鉴权访问和白名单的区别。

大部分的Security文章包括官方文档给出免鉴权访问都是使用.permitAll()去对相应路径进行免鉴权访问,但实际上这仅仅只表示该资源不需要相应的权限访问,但是用户还需要认证.也就是Security的认证/授权两个概念.

Security白名单策略

将需要放行的白名单使用.ignoring注册.

 @Beanpublic WebSecurityCustomizer ignoringCustomizer() {return web -> web.ignoring().requestMatchers(whiteUrlArr);}

当Spring启动后,会将其中每个url注册为一个MvcRequestMatcher并且放入到WebSecurity中的ignoredRequests管理。

然后在构建WebSecurity时去创建对应的DefaultSecurityFilterChain.

然后这些会被放入到Security的过滤链中交给WebSecurity进行管理,当有请求进入后就会进入到过滤链时,WebSecurity会去循环调用chian,以获取处理请求路径对应的过滤器组成过滤链,如果未注册ignor则会使用默认的AnyRequest,这将返回全部的Security过滤器.

    private List<Filter> getFilters(HttpServletRequest request) {int count = 0;Iterator var3 = this.filterChains.iterator();SecurityFilterChain chain;do {if (!var3.hasNext()) {return null;}chain = (SecurityFilterChain)var3.next();if (logger.isTraceEnabled()) {++count;logger.trace(LogMessage.format("Trying to match request against %s (%d/%d)", chain, count, this.filterChains.size()));}} while(!chain.matches(request));return chain.getFilters();}

而DefaultSecurityChain则会使用其对应的match对请求路径进行匹配,如果匹配上则返回相应的过滤器.

匹配成功返回RequestMatchResult:

 通过返回的对象是否为空进行判断是否匹配成功:

匹配成功后会返回其对应的Filter,因为是通过igonr去进行忽略的所以filter为空,所以就会忽略对对应路径请求的鉴权等操作.

这就是SpringSecurity真正的白名单,而不仅仅是对相应路径进行免权访问.

后续会尝试去探索免权访问...

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL中多表查询之外连接
  • 网络基础之(11)优秀学习资料
  • Linux - 进程的概念、状态、僵尸进程、孤儿进程及进程优先级
  • 蓝桥杯 2024 年第十五届省赛真题 —— 最大异或结点
  • Linux系统编程——生产者消费者模型
  • python基础---2.流程控制及函数
  • 2024Summer周报三
  • nodejs - express 学习笔记
  • 【Qt 】JSON 数据格式详解
  • 【传知代码】智慧医疗:纹理特征VS卷积特征(论文复现)
  • 计算机网络 6.1Internet概念
  • STM32 裸机 LWIP RAW接口 TCP客户端和服务端,以及UDP收发实现
  • Binius-based zkVM:为Polygon AggLayer开发、FPGA加速的zkVM
  • python机器学习8--网络
  • 【React】JSX 实现列表渲染
  • ----------
  • [deviceone开发]-do_Webview的基本示例
  • 【RocksDB】TransactionDB源码分析
  • 【腾讯Bugly干货分享】从0到1打造直播 App
  • Android 架构优化~MVP 架构改造
  • Bytom交易说明(账户管理模式)
  • gulp 教程
  • SpringBoot 实战 (三) | 配置文件详解
  • webpack入门学习手记(二)
  • 编写高质量JavaScript代码之并发
  • 大整数乘法-表格法
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 工程优化暨babel升级小记
  • 互联网大裁员:Java程序员失工作,焉知不能进ali?
  • 利用DataURL技术在网页上显示图片
  • 让你的分享飞起来——极光推出社会化分享组件
  • 深度学习入门:10门免费线上课程推荐
  • 深入浅出webpack学习(1)--核心概念
  • 数据可视化之 Sankey 桑基图的实现
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 腾讯优测优分享 | 你是否体验过Android手机插入耳机后仍外放的尴尬?
  • 跳前端坑前,先看看这个!!
  • 突破自己的技术思维
  • ​Python 3 新特性:类型注解
  • ​字​节​一​面​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • ### Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLTr
  • #1015 : KMP算法
  • $.ajax中的eval及dataType
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2015)JS ES6 必知的十个 特性
  • (2024)docker-compose实战 (8)部署LAMP项目(最终版)
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (独孤九剑)--文件系统
  • (附源码)计算机毕业设计大学生兼职系统
  • (转) Android中ViewStub组件使用
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***监测系统的构建(chkrootkit )
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net mvc actionresult 返回字符串_.NET架构师知识普及