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

pig4cloud中RequestMatcher的添加

环境

SpringBoot版本:2.7.14

SpringSecurity版本:5.7.10

pig4cloud版本:3.7.1-JDK8

概述

执行完SpringSecurity默认的Configuration之后,会执行自定义的Configuration,这里因为upms没有别的自定义配置;所以它只有依赖的pig-common/pig-common-security的配置:PigResourceServerConfiguration;执行到这个Configuration之前,已经加载了SpringSecurity的默认配置,然后在PigResourceServerConfiguration中会禁用一些Configuration;也会重新添加OAuth2ResourceServerConfigurer;在OAuth2ResourceServerConfigurer中会构建RequestMatcher

启动时添加RequestMatcher(以upms模块为例)

1. 执行到PigResourceServerConfiguration

执行到PigResourceServerConfiguration时,已经执行了SpringSecurity默认的Configuration了(默认的怎么执行可以看:这个文档),所以可以看到http对象中已经有了10个configure和1个filter;

2. 添加一个AntMatcher

可以看到添加了一个AntMatcher,将所有要放行的url(之前配置文件application.yml有配过的security.oauth2.ignore中的和默认放行的)

PermitAllUrlProperties中的部分代码截图:

关于AntMatcher可以看:这个文档

可以看到通过permitAll方法添加了一个带所有忽略的url的AntMatcher的ExpressionUrlAuthorizationConfigurer;

现在就变成了11个configure

3. 执行oauth2ResourceServer方法

然后执行oauth2ResourceServer方法,在这个方法中会添加请求头认证的token对象,请求头认证的entryPoint和token内省器;

最后会通过HttpSecurity的oauth2ResourceServer添加一个OAuth2ResourceServerConfigurer;现在就是12个configure

然后禁用了csrf,configure就变成了11个

4. 执行http.build

然后会走build流程,将这11个configure进行构建

从configures方法看,着重看ExpressionUrlAuthorizationConfigurer和OAuth2ResourceServerConfigurer;

4.1 ExpressionUrlAuthorizationConfigurer

这个方法主要是创建一个metadataSource,通过metadataSource创建FilterSecurityInterceptor对象,然后将其加入到http对象的filter中;

而metadataSource对象就是将之前拿到的ignore的url进行封装,做成RequestMatcher对象;

可以看到将所有ignore的url放到了最前面;如果匹配不到的花就要走any request;

然后通过createFilterSecurityInterceptor方法创建一个FilterSecurityInterceptor对象,这个对象会设置上之前的ignore url;

最后将处理好的FilterSecurityInterceptor放入HttpSecurity的对象http的filter中;

4.2 OAuth2ResourceServerConfigurer

这个configure的configure方法首先获取token内省器;然后取到里面的requestMatcher取出;设置给token内省器BearerTokenResolver;可以看到里面有个pathMatcher和一个urlProerties;

这些是在PigBearerTokenExtractor初始化的时候添加进去的

然后将其添加到requestMatcher(BearerTokenRequestMatcher)中;然后初始化AuthenticationManager对象;

看配置哪一个,有jwtConfigurer和opaqueTokenConfigurer;

然后通过AuthenticationManager来new一个BearerTokenAuthenticationFilter;然后通过setBearerTokenResolver方法设置放行的url的requestMatcher;最后将其添加到HttpSecurity的对象http中;

最后可以看到构造出来了13个filter,其中就有鉴权token的BearerTokenAuthenticationFilter和负责授权的FilterSecurityInterceptor;他们都已经有了匹配规则


http://www.mrgr.cn/news/30756.html

相关文章:

  • Python知识点:详细讲解在Python编程中,GIL(全局解释器锁)的影响与规避方法
  • Vue子组件样式受到父组件污染
  • 计算机组成原理之计算机硬件的基本组成
  • 会计稳健性Cscore模型(2000-2022年)
  • 深入探索NumPy
  • 等保测评:企业如何构建安全的网络架构
  • LIN总线CAPL函数—— 设置与测量从节点的波特率(linSetRespBaudrate)
  • 使用JavaWeb开发注册功能时,校验用户名是否已存在的一个思路(附代码)
  • 【雪球-注册安全分析报告-无验证方式导致安全隐患】
  • Rust编程的作用域与所有权
  • 易优CMS:打开后台提示“不在特定范围内”(已解答)
  • Vue3(一) Vite创建Vue3工程,选项式API与组合式API;setup的使用;Vue中的响应式ref,reactive
  • shell运算实战案例-KFC点餐系统
  • 将预设表结构导入MySQL数据库的方法及原理
  • 哲风壁纸js逆向:实战爬取图
  • 《深入了解 Linux 操作系统》
  • c++9月19日
  • Zabbix_5.0 构建企业级监控告警平台----图形监控
  • 批量处理docker容器以及镜像的脚本
  • 【Linux系统编程】第二十一弹---进程的地址空间