这个项目提供了一个构建在 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. 它是如何工作的
客户端向 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的图表
XStream使用文档
WebService发布过程及常见问题
webpack实战入门进阶调优分享
weblogic调优参数及监控指标
weblogic节点管理
weblogic管理控制台概述
weblogic-部署和启动
WebLogic-Server-性能及调优-调优-Java-虚拟机
Java 虚拟机(Java virtual machine,简称 JVM)是一种虚拟“执行引擎”实例,可在微处理器上执行 Java 类文件中的字节码。调整 JVM 的方式会影响 Weblogic Server 和应用程序的性能。
Velocity是一个基于java的模板引擎(template engine)。它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象。
Velocity 用户手册是帮助页面设计者和内容提供者认识 Velocity 和其简单而功能强大的脚本语言――Velocity 模板语言(VTL)。在手册上的许多例子,都是用 Velocity 插入动态的内容到网页上,但是所有的 VLT 例子都能应用到其他的页面和模板中。
CAD快捷键有哪些?(常用的CAD快捷键命令大全) 65
一、常用绘图快捷键。最基本的一些画图的功能操作,简单来说就是CAD制图的打底部分。(如下图)二、常用编辑快捷键CAD中对图形进行修改的操作。
chatgpt是谁开发的? 109
OpenAI官网显示,为ChatGPT项目做出贡献的人员不足百人(共87人)。从成员毕业高校分布看,校友最多的前5大高校是斯坦福大学(14人)、加州大学伯克利分校(10人)、麻省理工学院(7人)、剑桥大学(5人)、哈佛大学(4人)和佐治亚理工学院(4人)。
怎么注册chatgpt(chatgpt怎么使用) 241
第一步 上网工具。打开上网工具,工具基本是需要付费使用的。注册然后按照教程安装,直到能够测试上网打开即可。
win10版本区别有哪些?怎么选择?哪个更好用? 70
win10系统分为7个版本。家庭版(Windows 10 Home);专业版(Windows 10 Professional);企业版(Windows 10 Enterprise);教育版(Windows 10 Education);移动版(Windows 10 Mobile);移动企业版(Windows 10 Mobile Enterprise);物联网核心版(Windows 10 loT Core)
win10自动更新怎么关闭,教你三步即可搞定 54
方法一:组策略关闭 1、同时按下“Win+R”打开运行窗口,然后输入gpedit.msc回车打开【本地组策略编辑器】。2、在组策略编辑里面,我们依次展开【计算机配置 - 管理模板 - Windows 组件 - Windows 更新】,然后在右侧找到【配置自动更新】选项选中。