Spring Cloud Gateway Predicate.Path过滤分析

源码位置
spring-cloud-gateway-core-2.0.1.RELEASE-sources.jar!/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java

过滤方法

    @Overridepublic Predicate<ServerWebExchange> apply(Config config) {synchronized (this.pathPatternParser) {//仅在第一次调用路由时执行,将pattern字符串转PathPattern对象config.pathPattern = this.pathPatternParser.parse(config.pattern);}return exchange -> {PathContainer path = parsePath(exchange.getRequest().getURI().getPath());//path(url)转PathContainer对象   
//在此位置设置断点,每次走到需要predicate.Path过滤的路径都会进入到这里boolean match = config.pathPattern.matches(path);//路径表达式匹配判断traceMatch("Pattern", config.pathPattern.getPatternString(), path, match);if (match) {PathMatchInfo uriTemplateVariables = config.pathPattern.matchAndExtract(path);exchange.getAttributes().put(URI_TEMPLATE_VARIABLES_ATTRIBUTE, uriTemplateVariables);return true;} else {return false;}};}

手动测试表达式效果
new PathPatternParser().parse("/sys*/**").matches(path)

匹配/sys-aaa/sadf、/sysf3s/sa等格式路径

 

进入逻辑:
onNext:reactor-core-3.1.10.RELEASE-sources.jar!/reactor/core/publisher/MonoFilterWhen.java
从这里进入gateway
lookupRoute:spring-cloud-gateway-core-2.0.1.RELEASE-sources.jar!/org/springframework/cloud/gateway/handler/RoutePredicateHandlerMapping.java
进入
toAsyncPredicate:spring-cloud-gateway-core-2.0.1.RELEASE-sources.jar!/org/springframework/cloud/gateway/support/ServerWebExchangeUtils.java
最后进入
lambda$apply$:spring-cloud-gateway-core-2.0.1.RELEASE-sources.jar!/org/springframework/cloud/gateway/handler/predicate/PathRoutePredicateFactory.java

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

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

相关文章

《大型网站技术架构:核心原理与案例分析》-- 读书笔记 (2) : 大型网站核心架构要素(1) -- 性能...

1. 性能 在浏览器端&#xff0c;可能通过浏览器缓存、使用页面压缩、合理布局页面、减少cookie传输等手段改善性能。还可以使用CDN&#xff0c;将网站静态内容分发至离用户最近的网络服务商机房。可以在网站机房部署反向代理服务器&#xff0c;缓存热点文件&#xff0c;加快请求…

ubuntu18.04安装mysql8

下载apt包 https://dev.mysql.com/downloads/repo/apt/ 安装 sudo dpkg -i mysql-apt-config_0.8.13-1_all.deb #选择 OK sudo apt update 安装mysql8 sudo apt install mysql-server 输入密码 密码加密方式选择5.x Use Legacy Authentication Method (Retain MySQL 5.x Comp…

python3 centos7 Python.h无法找到

环境python3.6、centos7 安装geohash包时报错“致命错误:Python.h:没有那个文件或目录” 运行如下命令即可 yum install -y python3-devel 如果找不到该包&#xff0c;就比较麻烦了&#xff0c;即使下载到这个包&#xff0c;又依赖其他的包&#xff0c;其他的包也需要再找&am…

MATLAB入门学习(三)

我们再来看看矩阵常用的函数&#xff0c;除了上一篇提到的inv还有以下常见命令&#xff1a; det 计算方阵行列式 eig 计算特征值 trace 计算矩阵的迹 norm 计算矩阵的范数或模 orth 正交化 poly 求特征多项式 lu LU分解 【看到这些突然觉得我线性代数没学好(ノへ&#xffe3;、…

centos yum 安装python3.6+pip

yum install -y python3 或者 yum install -y python36 ln -s /usr/bin/python36 /usr/bin/python3 对应的执行命令 python3 pip3

centos7 python3.6编译安装

目录 安装编译依赖 下载python包 解压编译&安装 连接文件 安装pip 安装编译依赖 yum -y install gcc automake autoconf libtool make zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-deve…

P M P 常用缩写及公式

常用缩写 A AC&#xff1a;实际成本- Actual Cost : 在一个给定的时间段内&#xff0c;为完成进度活动或工作分解结构组成部分的工作&#xff0c;而实际发生并记录在案的总成本。实际成本有时仅为直接工时或直接成本&#xff0c;有时也为包括间接成本在内的所有成本。实际成本…

java控制台输出百分比进度条示例

System.out.print("\b") 会在控制台下往回删掉一个字符&#xff0c;如果你想回删多个字符就打印多个 "\b" public static void main(String[] args) throws Exception { System.out.print("Progress:"); for (int i 1; i < 100; i)…

myeclipse上进行tomcat远程调试

1.将Tomcat中的bin目录下的startup.bat启动脚本复制一份到本目录下并且修改名字为startup-debug.bat&#xff0c;然后打开startup-debug.bat文件 再startup-debug.bat文件的最下面找到 call "%EXECUTABLE%" start %CMD_LINE_ARGS% 这句话&#xff0c;将这句话修改为 …

elasticdump elasticsearch数据备份与迁移 导入导出

简单yum源安装方式在centos7中执行报错&#xff0c;nodejs版本太低 #yum install -y npm #npm install elasticdump -g 下面是可用的下载安装 下载最新nodejs包https://nodejs.org/en/download/ 这里是 https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz wge…

Eclipse插件安装

使用link文件法a.假设Eclipse的安装目录在C:\eclipse&#xff0c;在该文件夹下&#xff0c;新建这样的目录结构D:\eclipse\myplugin\jode\eclipse&#xff1b;b.解压下载的eclipse 插件或者安装eclipse 插件到指定目录BB&#xff08;如&#xff1a;D:\BB&#xff09;文件夹&…

centos7部署nodejs新版

yum方式安装版本较旧6.X&#xff0c;许多包都有问题&#xff0c;所以需要安装新版包。 下载最新nodejs包https://nodejs.org/en/download/ 这里是 https://nodejs.org/dist/v12.13.0/node-v12.13.0-linux-x64.tar.xz wget https://nodejs.org/dist/v12.13.0/node-v12.13.0-lin…

2015腾讯暑期实习笔试题目

2015腾讯暑期实习笔试题目 2015腾讯暑期实习笔试题目 &#xff08;1&#xff09;、层次遍历序列为ABCDEFG的二叉树&#xff0c;其中序遍历的序列是什么&#xff1f; &#xff08;2&#xff09;、ABCABC为入栈的顺序&#xff0c;倘若出栈的顺序为ABCCBA&#xff0c;那么,设栈的操…

360健康助手文件存储位置 获取图片

最近发现360健康助手的背景图都不错&#xff0c;想留下来当背景&#xff0c;故找一找…… 文件存储位置 %AppData%\Roaming\360safe\DesktopRest\eye bk_image目录中是背景图片&#xff0c;扩展名改成png即可打开 citytree.dat文件扩展名改成zip&#xff0c;打开后是一个cityt…

sqlserver实现分页的几种方式

sqlserver实现分页的几种方式 第一种:使用org.springframework.data.domain.Page来进行分页 package com.cellstrain.icell.repository.repositoryImpl;import com.cellstrain.icell.entity.V_Paper;import org.springframework.beans.factory.annotation.Autowired;import org…

FastDFS部署及测试

目录 简介 部署 测试 简介 FastDFS是一款开源的分布式文件系统&#xff0c;功能主要包括&#xff1a;文件存储、文件同步、文件访问&#xff08;文件上传、文件下载&#xff09;等&#xff0c;解决了文件大容量存储和高性能访问的问题。FastDFS特别适合以文件为载体的在线服…