Spring Cloud Gateway核心之Predicate

路由 Predicate 工厂

在这里插入图片描述

Spring Cloud Gateway 将路由作为 Spring WebFluxHandlerMapping基础设施的一部分进行匹配。Spring Cloud Gateway 包含许多内置的路由Predicate 工厂。所有这些谓词都匹配 HTTP 请求的不同属性。多个 Route Predicate Factory 可以组合,并通过逻辑组合and。

After Route Predicate Factory

After Route Predicate Factory 采用一个参数,即日期时间。此谓词匹配当前日期时间之后发生的请求。

例子:此路线匹配 2017 年 1 月 20 日 17:42 山地时间(丹佛)之后的任何请求。
spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After=2017-01-20T17:42:47.789-07:00[America/Denver]

Before Route Predicate Factory

Before Route Predicate Factory 采用一个参数,即日期时间。此谓词匹配当前日期时间之前发生的请求。

例子:此路线匹配 2017 年 1 月 20 日 17:42 山地时间(丹佛)之前的任何请求。
spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before=2017-01-20T17:42:47.789-07:00[America/Denver]

Between Route Predicate Factory

Between Route Predicate Factory 采用两个参数:datetime1 和 datetime2。此谓词匹配在 datetime1 之后和 datetime2 之前发生的请求。datetime2 参数必须位于 datetime1 之后。

例子:此路线匹配 2017 年 1 月 20 日 17:42 山地时间(丹佛)之后和 2017 年 1 月 21 日 17:42 山地时间(丹佛)之前的任何请求。这对于维护窗口可能很有用。
spring:cloud:gateway:routes:- id: between_routeuri: https://example.orgpredicates:- Between=2017-01-20T17:42:47.789-07:00[America/Denver], 2017-01-21T17:42:47.789-07:00[America/Denver]

Cookie Route Predicate Factory

Cookie 路由谓词工厂采用两个参数:cookie 名称和正则表达式。此谓词匹配具有给定名称且值与正则表达式匹配的 cookie。

例子:该路由匹配请求有一个名为chocolatewho 的值与ch.p正则表达式匹配的 cookie。
spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookie=chocolate, ch.p

Header Route Predicate Factory

标头路由谓词工厂采用两个参数:标头名称和正则表达式。此谓词与具有给定名称且值与正则表达式匹配的标头匹配。

例子:如果请求具有名为X-Request-Idwhos 值与\d+正则表达式匹配的标头(具有一位或多位数字的值),则此路由匹配。
spring:cloud:gateway:routes:- id: header_routeuri: https://example.orgpredicates:- Header=X-Request-Id, \d+

Host Route Predicate Factory

主机路由谓词工厂采用一个参数:主机名模式列表。该模式是一个 Ant 风格模式,以.分隔符作为分隔符。该谓词匹配Host与模式匹配的标头。

例子:还支持 URI 模板变量,例如{sub}.myhost.org.
如果请求的Host标头值为www.somehost.orgorbeta.somehost.org或,则此路由将匹配www.anotherhost.org。
该谓词提取 URI 模板变量(如上sub例中定义的)作为名称和值的映射,并将其放置在 中,ServerWebExchange.getAttributes()并使用 中定义的键ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE。这些值随后可供GatewayFilter Factory使用
spring:cloud:gateway:routes:- id: header_routeuri: https://example.orgpredicates:- Header=X-Request-Id, \d+

Method Route Predicate Factory

方法路由谓词工厂采用一个参数:要匹配的 HTTP 方法。

例子:如果请求方法是 ,则该路由将匹配GET。
spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- Method=GET

Path Route Predicate Factory

路径路由谓词工厂采用两个参数:Spring 模式列表PathMatcher和可选标志matchOptionalTrailingSeparator。

例子:如果请求路径是,例如:/foo/1or /foo/baror ,则该路由将匹配/bar/baz。
该谓词提取 URI 模板变量(如上segment例中定义的)作为名称和值的映射,并将其放置在 中,ServerWebExchange.getAttributes()并使用 中定义的键ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE。这些值随后可供GatewayFilter Factory使用
spring:cloud:gateway:routes:- id: host_routeuri: https://example.orgpredicates:- Path=/foo/{segment},/bar/{segment}

Query Route Predicate Factory

查询路由谓词工厂采用两个参数:必需的param和可选的regexp。

例子:如果请求包含baz查询参数,则该路由将匹配。
spring:cloud:gateway:routes:- id: query_routeuri: https://example.orgpredicates:- Query=baz

RemoteAddr Route Predicate Factory

RemoteAddr 路由谓词工厂采用 CIDR 表示法(IPv4 或 IPv6)字符串的列表(最小大小为 1),例如192.168.0.1/16(其中192.168.0.1是 IP 地址,16是子网掩码)。

例子:如果请求的远程地址是 ,则该路由将匹配192.168.1.10
spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr=192.168.1.1/24

Modifying the way remote addresses are resolved

默认情况下,RemoteAddr 路由谓词工厂使用传入请求中的远程地址。如果 Spring Cloud Gateway 位于代理层后面,这可能与实际的客户端 IP 地址不匹配。
您可以通过设置自定义来自定义远程地址的解析方式RemoteAddressResolver。Spring Cloud Gateway 附带一个非默认远程地址解析器,该解析器基于X-Forwarded-For 标头, XForwardedRemoteAddressResolver。
XForwardedRemoteAddressResolver有两个静态构造函数方法,它们采用不同的安全方法:
XForwardedRemoteAddressResolver::trustAll返回 a RemoteAddressResolver,它始终采用标头中找到的第一个 IP 地址X-Forwarded-For。X-Forwarded-For这种方法很容易受到欺骗,因为恶意客户端可以设置解析器接受的初始值。
XForwardedRemoteAddressResolver::maxTrustedIndex采用与 Spring Cloud Gateway 前面运行的可信基础设施数量相关的索引。例如,如果 Spring Cloud Gateway 只能通过 HAProxy 访问,则应使用值 1。如果在访问 Spring Cloud Gateway 之前需要可信基础设施的两跳,则应使用值 2。

给定下面的header值:

X-Forwarded-For: 0.0.0.1, 0.0.0.2, 0.0.0.3

使用Java配置:

RemoteAddressResolver resolver = XForwardedRemoteAddressResolver.maxTrustedIndex(1);....route("direct-route",r -> r.remoteAddr("10.1.1.1", "10.10.1.1/24").uri("https://downstream1")
.route("proxied-route",r -> r.remoteAddr(resolver,  "10.10.1.1", "10.10.1.1/24").uri("https://downstream2")
)

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

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

相关文章

[项目设计] 从零实现的高并发内存池(四)

🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[高并发内存池] ❤️ 前置学习专栏:[Linux学习] ⏰ 我们仍在旅途 ​ 目录 6.内存回收 6.1 ThreadCache回收内存 6.2 CentralCache回收内存 Rele…

Doris实战——金融壹账通指标中台的应用实践

目录 前言 一、业务痛点 二、早期架构挑战 三、架构升级 四、一体化指标数据平台 4.1 构建指标体系 4.2 构建指标平台功能 五、Doris指标应用实践 六、未来规划 原文大佬的这篇指标中台的应用实践有借鉴意义,这里摘抄下来用作学习和知识沉淀。 前言 在搭建…

20240305-2-海量数据处理常用技术概述

海量数据处理常用技术概述 如今互联网产生的数据量已经达到PB级别,如何在数据量不断增大的情况下,依然保证快速的检索或者更新数据,是我们面临的问题。 所谓海量数据处理,是指基于海量数据的存储、处理和操作等。因为数据量太大无…

【机器人最短路径规划问题(栅格地图)】基于遗传算法求解

代码获取方式:QQ:491052175 或者 私聊博主获取 基于遗传算法求解机器人最短路径规划问题(栅格地图)的仿真结果 仿真结果: 路径长度的变化曲线: 遗传算法优化后的机器人避障路径:

裸机编程的几种模式、架构、缺陷

目录 裸机编程模式/架构 1:初始化代码的编写 裸机编程模式/架构 2:轮询模式 裸机编程模式/架构 3:轮询加中断执行模式 裸机编程模式/架构 4:中断定时器主循环的前后台架构 裸机编程模式/架构 5:前后台 状态机架构…

初次实战SQL注入

目录 1.判断漏洞是否存在 2.判断注入类型(数字型/字符型) 3.猜列数 4.联合查询判断回显位 6.获取数据库表明 此实验为本人学习内容,从未攻击任何网站!!!请伙伴们同样遵纪守法!!…

24计算机考研深大经验分享(计算机专业考研综合安排)

文章目录 背景科目选择高数选课一轮二轮冲刺阶段 线代一轮二轮 概率论计算机学科专业基础408数据结构计算机组成原理操作系统计算机网络总结 英语政治 末言 背景 首先贴一下初试成绩。这篇分享主要是给零基础的同学使用的,基础好的同学可以自行了解补充一下&#xf…

CTP-API开发系列之柜台系统简介

CTP-API开发系列之柜台系统简介 CTP-API开发系列之柜台系统简介中国金融市场结构---交易所柜台系统通用柜台系统极速柜台系统主席与次席 CTP柜台系统CTP组件名称对照表CTP柜台系统程序包CTP柜台系统架构图 CTP-API开发系列之柜台系统简介 中国金融市场结构—交易所 我们知道提…

【Flink入门修炼】2-2 Flink State 状态

什么是状态?状态有什么作用?如果你来设计,对于一个流式服务,如何根据不断输入的数据计算呢?又如何做故障恢复呢? 一、为什么要管理状态 流计算不像批计算,数据是持续流入的,而不是…

网络编程(3/4)

广播 ​ #include<myhead.h>int main(int argc, const char *argv[]) {//1、创建套接字int sfd socket(AF_INET, SOCK_DGRAM, 0);if(sfd -1){perror("socket error");return -1;}//2、将套接字设置成允许广播int broadcast 1;if(setsockopt(sfd, SOL_SOC…

javascript基础入门

1.第一个javascript程序 javascript程序不能够独立的运行&#xff0c;必须依赖于HTML文件&#xff0c;type属性值用来说明脚本的类型&#xff0c;这里 是指使用javascript编写的文本文件&#xff1b; 2.alert警告框 alert&#xff08;&#xff09;函数显示一条指定的信息&am…

Vue router文件中本地路由配置使用i18n【解决tab名称出现undefined,导致i18n没有实现问题】

问题 点击按钮 跳转详情页后 tab名称出现错误&#xff0c;报 undefined ## 需求 点击工单详情按钮&#xff0c;跳转详情页面&#xff08;新页面&#xff09;&#xff0c;新页面tab栏名称 还是为 工单出库&#xff0c;但要求工单出库文字配置为多语言&#xff0c;使用i18n来配置…

[云原生] K8s之pod控制器详解

Pod 是 Kubernetes 集群中能够被创建和管理的最小部署单元。所以需要有工具去操作和管理它们的生命周期,这里就需要用到控制器了。 Pod 控制器由 master 的 kube-controller-manager 组件提供&#xff0c;常见的此类控制器有 Replication Controller、ReplicaSet、Deployment、…

SQOOP安装与使用

SQOOP安装及使用 文章目录 SQOOP安装及使用SQOOP安装1、上传并解压2、修改配置文件3、修改环境变量4、添加MySQL连接驱动5、测试 准备MySQL数据登录MySQL数据库创建student数据库切换数据库并导入数据另外一种导入数据的方式使用Navicat运行SQL文件导出MySQL数据库 importMySQL…

购买使用静态住宅代理IP前,你需要测试的5件事

静态住宅代理IP&#xff0c;是一种在网络通信过程中提供固定IP地址的代理服务。与动态代理IP相比&#xff0c;静态代理IP提供的是持久且不变的IP地址。这种稳定性使得静态代理IP在需要长期稳定网络身份的场景中&#xff0c;如跨境电商/社媒养号、网络监控、品牌保护、长期数据爬…

安卓使用ExoPlayer出现膨胀类异常

1.导包 implementation com.google.android.exoplayer:exoplayer-core:2.15.1implementation com.google.android.exoplayer:exoplayer-ui:2.15.1 2.在Androidifest.xml加入权限&#xff0c;我这里加了网络与读写权限 <uses-permission android:name"android.permissio…

windows中使用nnUNet的nnUNet_convert_decathlon_task提示路径不对

找到问题并且解决解决办法 报错时候的指令 nnUNet_convert_decathlon_task -i D:\桌面\nnUNet\DATASET\nnUNet_raw\nnUNet_raw_data\Task05_Prostate 修改为 nnUNet_convert_decathlon_task -i D:/桌面/nnUNet/DATASET/nnUNet_raw/nnUNet_raw_data/Task05_Prostate 修改点&…

H5双人五子棋小游戏

H5小游戏源码、JS开发网页小游戏开源源码大合集。无需运行环境,解压后浏览器直接打开。有需要的,私信本人,发演示地址,可以后再订阅,发源码,含60+小游戏源码。如五子棋、象棋、植物大战僵尸、开心消消乐、扑鱼达人、飞机大战等等 <!DOCTYPE html> <html> <…

移动开发:网格视图

一、在新建GridView模块下添加图片以及创建cell.xml文件 1.粘贴图片时选择红框中的路径&#xff0c;点击“OK” 2.在路径后添加-mdpi后缀,再点击“OK” 二、相关代码块 1.MainActivity.java文件代码 package com.example.gridview;import androidx.appcompat.app.AppCompatAc…

备考2024年北京高考数学:20114~2023十年选择题练习和解析

距离2024年高考还有三个月的时间&#xff0c;如何用三个月的时间再提高北京数学高考的成绩&#xff1f;吃透历年真题以及背后的知识点是行之有效的方法 之一。 今天我们来看一下2014-2023年的北京市高考数学的选择题&#xff0c;从过去十年&#xff08;2014-2023&#xff09;的…