SpringCloudGateway2.1使用手册

c#小王子 c#小王子 2022-04-04 570 Java

这个项目提供了一个构建在 Spring 生态系统之上的 API 网关,包括:Spring 5,Spring Boot 2 和 Project Reactor。 Spring Cloud Gateway 旨在提供一种简单而有效的 API 路由方式,并为其提供横切关注点,例如:安全,监控/指标和弹性。


特征

 构建于 Spring Framework 5,Project Reactor 和 Spring Boot 2.0

 能够匹配任何请求属性的路由

 谓词和过滤器对于路由是特定的

 Hystrix 断路器集成

 Spring Cloud DiscoveryClient 集成

 易于编写谓词和过滤器

 请求速率限制

 路径重写


1. 如何引入 Spring Cloud Gateway

要在项目中引入 Spring Cloud Gateway,请使用 org.springframework.cloud 启动

依赖包,其构件 id 是 spring-cloud-starter-gateway。请参阅 Spring Cloud Project页面,

以获取有关使用当前 Spring Cloud Release Train 设置构建系统的详细信息。如果引入启

动依赖包,但由于某种原因,您不希望启用网关,请设置 spring.cloud.gateway.enabled =

false。


注意:

Spring Cloud Gateway 需要 Spring Boot 和 Spring Webflux 提供 Netty 运行时。它不能在传统的 Servlet 容器中工作或构建为 WAR。


2. 词汇表

路由:路由是网关的基本构建模块。它由一个 ID,一个目标 URI,一组谓词和一个过滤器的集合定义。如果聚合谓词为真,则路由匹配。

谓词:这是一个 Java 8 函数谓词。输入类型是一个 Spring 框架的 ServerWebExchange。这允许开发人员匹配来自 HTTP 请求的任何内容,例如头部或参数。

过滤器:这些是 Spring 框架网关过滤器在特定工厂中构建的实例。这里,可以在发送下游请求之前或之后修改请求和响应。


3. 它是如何工作的


SpringCloudGateway2.1使用手册


客户端向 Spring Cloud Gateway 发出请求。如果网关处理程序映射确定请求与路由匹配,则将其发送到网关 Web 处理程序。这个运行的处理程序通过特定于请求的过滤器链发送请求。过滤器被虚线划分的原因是过滤器可以在发送代理请求之前或之后执行逻辑。执行所有“pre”过滤器逻辑,然后进行代理请求。在发出代理请求之后,执行“post”过滤器逻辑。


注意:

在路由中定义的没有端口的 URI 将分别为 HTTP 和 HTTPS URI 获取默认端口设置为 80 和 443。


4. 路由谓词工厂链

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


4.1. After 路由谓词工厂

After 路由谓词工厂采用一个 datetime 类型的参数。此谓词匹配当前日期时间之后发生的请求。


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: after_route
 uri: http://example.org
 predicates:
 - After=2017-01-20T17:42:47.789-07:00[America/Denver]

此路由与 2017 年 1 月 20 日 17:42 Mountain Time(Denver)之后的所有请求相匹配。


4.2. Before 路由谓词工厂

Before 路由谓词工厂采用一个 datetime 类型的参数。此谓词匹配当前日期时间之前发生的请求。


application.yml
spring:
 cloud:
 gateway: 
 routes:
 - id: before_route
 uri: http://example.org
 predicates:
 - Before=2017-01-20T17:42:47.789-07:00[America/Denver]

此路由与 2017 年 1 月 20 日 17:42 Mountain Time(Denver)之前的任何请求相匹配。


4.3. Between 路由谓词工厂

Between 路由谓词工厂采用两个参数,datetime1 和 datetime2。此谓词匹配

datetime1 之后和 datetime2 之前发生的请求。datetime2 参数必须在 datetime1 之后。


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: between_route
 uri: http://example.org
 predicates:
 - Between=2017-01-20T17:42:47.789-07:00[America/Denver],
2017-01-21T17:42:47.789-07:00[America/Denver]

此路由与 2017 年 1 月 20 日 17:42 Mountain Time (Denver)之后和 2017 年 1 月 21 日17:42 Mountain Time (Denver)之前的所有请求相匹配。这对维护窗口很有用。


4.4. Cookie 路由谓词工厂

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


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: cookie_route uri: http://example.org
 predicates:
 - Cookie=chocolate, ch.p

此路由与请求匹配的 cookie 名称为 chocolate,其值与 CH.P 正则表达式匹配。


4.5. Header 路由谓词工厂

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


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: header_route
 uri: http://example.org
 predicates:
 - Header=X-Request-Id, \d+

如果请求具有名为 X-Request-Id 的 Header,其值与\d+正则表达式匹配(具有一个或多个数字的值),则该路由匹配。


4.6. Host 路由谓词工厂

Host 路由谓词工厂采用一个参数:主机名模式。该模式是一种 Ant 样式模式作为分隔符。此谓词与匹配该模式的主机头部匹配。


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: host_route
 uri: http://example.org
 predicates:
 - Host=**.somehost.org


如果请求的主机头部具有值www.somehost.org或beta.somehost.org,则此路由将匹配。

4.7. Method 路由谓词工厂

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


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: method_route
 uri: http://example.org
 predicates:
 - Method=GET

如果请求方法是 GET,则此路由将匹配。


4.8. Path 路由谓词工厂

Path 路由谓词工厂采用一个参数:Spring PurthMatter 模式。


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: host_route
 uri: http://example.org
 predicates:
 - Path=/foo/{segment}

如果请求路径如:/foo/1 或/foo/bar,则此路由将匹配。

此谓词提取 URI 模板变量(如上面示例中定义的 segment)作为名称和值的映射,并将其放置在 ServerWebExchange.getAttributes()中,其中键定义在PathRoutePre.e.URL_PREDICATE_VARS_ATTR 中。这些值随后可供网关过滤器工厂使用。


4.9. Query 路由谓词工厂

Query 路由谓词工厂采用两个参数:一个必需的参数和一个可选的正则表达式。


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: query_route
 uri: http://example.org
 predicates:
 - Query=baz

如果请求包含 baz 查询参数,此路由将匹配。


application.yml
spring:
 cloud:
 gateway:
 routes:
 - id: query_route
 uri: http://example.org
 predicates:
 - Query=foo, ba.

如果请求包含一个 foo 查询参数,它的值与 ba.正则表达式匹配,则此路由将匹配,所以bar 和 baz 都将匹配。


4.10. RemoteAddr 路由谓词工厂

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


application.yml
spring:
 cloud:
 gateway:
 routes: 
 - id: remoteaddr_route
 uri: http://example.org
 predicates:
 - RemoteAddr=192.168.1.1/24

如果请求的远程地址,如 192.1681.10,则该路由将匹配。


4.10.1.修改远程地址的解析方式

默认情况下,RemoteAddr 路由谓词工厂使用传入请求中的远程地址。如果 Spring Cloud Gateway 位于代理层后面,则可能与实际客户端 IP 地址不匹配。可以通过设置自定义RemoteAddressResolver 来自定义解析远程地址的方式。Spring Cloud Gateway 附带一个非默认远程地址解析器,它基于 X-Forwarded-For 头部和XForwardedRemoteAddressResolver。

XForwardedRemoteAddressResolver 有两种静态构造函数方法,它们采用不同的安全方法:XForwardedRemoteAddressResolver::trustAll 返回一个 RemoteAddressResolver,它总是使用在 X-Forwared-For 报头中找到的第一个 IP 地址。这种方法容易受到欺骗,因为恶意客户端可以为解析器接收的 X-Forwared-For 设置初始值。XForwardedRemoteAddressResolver :: maxTrustedIndex 采用与 Spring Cloud Gateway 前面运行的可信基础设施数量相关的索引。例如,如果只能通过 HAProxy 访问Spring Cloud Gateway,则应使用值 1。如果在访问 Spring Cloud Gateway 之前需要两跳可信基础设施,那么应该使用值 2。


给出以下头部值:

X-Forwarded-For: 0.0.0.1, 0.0.0.2, 0.0.0.3

下面的 maxTrustedIndex 值将产生以下远程地址。


【下载地址】


百度网盘链接:https://pan.baidu.com/s/13Yz4r7PnSP4ixgflv0dadw

提取码:xefb


相关文章


使用-JFreeChart来创建基于web的图表

使用-JFreeChart来创建基于web的图表

XStream使用文档

XStream使用文档

WebService发布过程及常见问题

WebService发布过程及常见问题

webpack实战入门进阶调优分享

webpack实战入门进阶调优分享

weblogic调优参数及监控指标

weblogic调优参数及监控指标

weblogic节点管理

weblogic节点管理

weblogic管理控制台概述

weblogic管理控制台概述

weblogic-部署和启动

weblogic-部署和启动

WebLogic-Server-性能及调优-调优-Java-虚拟机

Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。

Velocity用户教程

Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。

Velocity用户手册

Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。


文章热度: 166291
文章数量: 333
推荐阅读

FlashFXP绿色版网盘下载,附激活教程 1764

FlashFxp百度网盘下载链接:https://pan.baidu.com/s/1MBQ5gkZY1TCFY8A7fnZCfQ。FlashFxp是功能强大的FTP工具

Adobe Fireworks CS6 Ansifa绿色精简版网盘下载 1553

firework可以制作精美或是可以闪瞎眼的gif,这在广告领域是需要常用的,还有firework制作下logo,一些原创的图片还是很便捷的,而且fireworks用法简单,配合dw在做网站这一块往往会发挥出很强大的效果。百度网盘下载链接:https://pan.baidu.com/s/1fzIZszfy8VX6VzQBM_bdZQ

navicat for mysql中文绿色版网盘下载 1616

Navicat for Mysql是用于Mysql数据库管理的一款图形化管理软件,非常的便捷和好用,可以方便的增删改查数据库、数据表、字段、支持mysql命令,视图等等。百度网盘下载链接:https://pan.baidu.com/s/1T_tlgxzdQLtDr9TzptoWQw 提取码:y2yq

火车头采集器(旗舰版)绿色版网盘下载 1701

火车头采集器是站长常用的工具,相比于八爪鱼,简洁好用,易于配置。火车头能够轻松的抓取网页内容,并通过自带的工具对内容进行处理。站长圈想要做网站,火车头采集器是必不可少的。百度网盘链接:https://pan.baidu.com/s/1u8wUqS901HgOmucMBBOvEA

Photoshop(CS-2015-2023)绿色中文版软件下载 1816

安装文件清单(共46G)包含Window和Mac OS各个版本的安装包,从cs到cc,从绿色版到破解版,从安装文件激活工具,应有尽有,一次性打包。 Photoshop CC绿色精简版 Photoshop CS6 Mac版 Photoshop CC 2015 32位 Photoshop CC 2015 64位 Photoshop CC 2015 MAC版 Photoshop CC 2017 64位 Adobe Photoshop CC 2018 Adobe_Photoshop_CC_2018 Photoshop CC 2018 Win32 Photoshop CC 2018 Win64

知之

知之平台是全球领先的知识付费平台。提供各个领域的项目实战经验分享,提供优质的行业解决方案信息,来帮助您的工作和学习

使用指南 建议意见 用户协议 友情链接 隐私政策 Powered by NOOU ©2020 知之