当前位置: 首页 > 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真正的白名单,而不仅仅是对相应路径进行免权访问.

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

http://www.lryc.cn/news/406273.html

相关文章:

  • 【Langchain大语言模型开发教程】评估
  • Python爬虫小项目实战
  • PHP Filesystem 简介
  • 源代码加密软件哪家好?五款企业级加密软件推荐
  • Redis常见的数据类型及操作方式
  • 谷粒商城实战笔记-55-商品服务-API-三级分类-修改-拖拽数据收集
  • AI绘画入门实践|Midjourney:使用 --seed 制作情侣头像与漫画
  • 笔记:Enum中FlagsAttribute特性的用法
  • QWidget如何切换ui
  • web网站组成
  • 带您详细了解安全漏洞的产生和防护
  • 【接口测试】params传参与body传参区别
  • 【docker】部署证书过期监控系统mouday/domain-admin
  • 高级java每日一道面试题-2024年7月17日
  • css中如何清除浮动
  • 【网络】tcp_socket
  • Live555源码阅读笔记:哈希表的实现
  • vue3创建vite项目
  • Maven概述
  • Easyu中datagrid点击时获取所在行的数据
  • java项目中添加SDK项目作为依赖使用(无需上传Maven)
  • 区块链和数据要素融合的价值及应用
  • 以太坊的可扩展性危机:探索执行层的瓶颈
  • 静态解析activiti文本,不入库操作流程
  • 100个python的基本语法知识【上】
  • Python从0到100(四十四):读取数据库数据
  • ZLMRTCClient配置说明与用法(含示例)
  • nginx代理服务配置,基于http协议-Linux(CentOS)
  • Photos框架 - 自定义媒体资源选择器(数据部分)
  • Spring Boot + Spring Cloud 入门