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

做衣服外贸用什么网站好wps演示做的和网站导航

做衣服外贸用什么网站好,wps演示做的和网站导航,上海百度公司,免费ppt模板下载软件有哪些Spring Cloud网关 Greenwich SR5 该项目提供了一个基于Spring生态系统的API网关#xff0c;其中包括#xff1a;Spring 5#xff0c;Spring Boot 2和项目Reactor。Spring Cloud网关的目的是提供一种简单而有效的方法来路由到API#xff0c;并向它们提供跨领域的关注#x…     Spring Cloud网关 Greenwich SR5 该项目提供了一个基于Spring生态系统的API网关其中包括Spring 5Spring Boot 2和项目Reactor。Spring Cloud网关的目的是提供一种简单而有效的方法来路由到API并向它们提供跨领域的关注例如安全性监视/度量和弹性。 如何包括Spring Cloud网关 要将Spring Cloud网关包含在项目中请将该启动器与组org.springframework.cloud和工件ID spring-cloud-starter-gateway一起使用。有关 使用当前Spring Cloud版本Train设置构建系统的详细信息请参见Spring Cloud项目页面。 如果包括启动器但由于某种原因您不希望启用网关请设置spring.cloud.gateway.enabledfalse。 重要 Spring Cloud网关基于Spring Boot 2.x Spring WebFlux和项目Reactor 构建。因此使用Spring Cloud网关时许多熟悉的同步库例如Spring Data和Spring Security和模式可能不适用。如果您不熟悉这些项目建议您在使用Spring Cloud Gateway之前先阅读它们的文档以熟悉一些新概念。 重要 Spring Cloud网关需要Spring Boot和Spring Webflux提供的Netty运行时。它不能在传统的Servlet容器中或作为WAR构建。 111.词汇表 路由路由网关的基本构建块。它由ID目标URI谓词集合和过滤器集合定义。如果聚合谓词为true则匹配路由。谓词这是 Java 8 Function谓词。输入类型为 Spring Framework ServerWebExchange。这使开发人员可以匹配HTTP请求中的任何内容例如标头或参数。过滤器这些是使用特定工厂构造的实例 Spring Framework GatewayFilter。在此可以在发送下游请求之前或之后修改请求和响应。 112.工作原理 客户端向Spring Cloud网关发出请求。如果网关处理程序映射确定请求与路由匹配则将其发送到网关Web处理程序。该处理程序运行通过特定于请求的筛选器链发送请求。筛选器由虚线分隔的原因是筛选器可以在发送代理请求之前或之后执行逻辑。执行所有“前置”过滤器逻辑然后发出代理请求。发出代理请求后将执行“后”过滤器逻辑。 在没有端口的路由中定义的URI将分别将HTTP和HTTPS URI的默认端口分别设置为80和443。 113.配置路由谓词工厂和网关过滤工厂 有两种配置谓词和过滤器的方法快捷方式和完全扩展的参数。下面的大多数示例都使用快捷方式。 名称和自变量名称将在第一部分或每部分的两个部分中以code的形式列出。参数通常按快捷方式配置所需的顺序列出。 113.1快捷方式配置 快捷方式配置由过滤器名称识别后跟等号后跟由逗号分隔的参数值,。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: after_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Cookie/spanmycookie,mycookievalue/span/span/span 先前的示例使用两个参数定义了Cookie Route Predicate Factory即cookie名称mycookie和与mycookievalue相匹配的值。 113.2完全展开的参数 完全扩展的参数看起来更像带有名称/值对的标准Yaml配置。通常将有一个name键和一个args键。args键是用于配置谓词或过滤器的键值对的映射。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: after_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - name/span: Cookie span stylecolor:#7f007f args/span: span stylecolor:#7f007f name/span: mycookie span stylecolor:#7f007f regexp/span: mycookievalue/span/span/span 这是上面显示的Cookie谓词的快捷方式配置的完整配置。 114.路由谓词工厂 Spring Cloud网关将路由匹配为Spring WebFlux HandlerMapping基础结构的一部分。Spring Cloud网关包括许多内置的Route Predicate工厂。所有这些谓词都与HTTP请求的不同属性匹配。多个路由谓词工厂可以合并也可以通过逻辑and合并。 114.1路由谓词工厂之后 After路由谓词工厂采用一个参数即datetime这是Java ZonedDateTime。该谓词匹配在当前日期时间之后发生的请求。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: after_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - After/span2017-01-20T17:42:47.789-07:00[America/Denverspan stylecolor:#7f0055strong]/strong/span/span/span/span 该路线与2017年1月20日17:42山区时间丹佛之后的所有请求匹配。 114.2路线谓词工厂之前 Before路由谓词工厂采用一个参数datetime它是Java ZonedDateTime。该谓词匹配当前日期时间之前发生的请求。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: before_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Before/span2017-01-20T17:42:47.789-07:00[America/Denverspan stylecolor:#7f0055strong]/strong/span/span/span/span 该路线与2017年1月20日17:42山区时间丹佛之前的所有请求匹配。 114.3路由谓词工厂之间 Between路由谓词工厂采用两个参数datetime1和datetime2它们是Java ZonedDateTime对象。该谓词匹配在datetime1之后和datetime2之前发生的请求。datetime2参数必须在datetime1之后。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: between_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Between/span2017-01-20T17:42:47.789-07:00[America/Denver]span stylecolor:#7f0055strong,/strong/span 2017-01-21T17:42:47.789-07:00[America/Denverspan stylecolor:#7f0055strong]/strong/span/span/span/span 该路线与2017年1月20日山区时间丹佛之后和2017年1月21日17:42山区时间丹佛之后的所有请求匹配。这对于维护时段可能很有用。 114.4 Cookie路线谓词工厂 Cookie Route Predicate Factory采用两个参数即cookie name和regexp这是Java正则表达式。该谓词匹配具有给定名称的cookie并且值匹配正则表达式。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: cookie_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Cookie/spanchocolatespan stylecolor:#7f0055strong,/strong/span ch.p/span/span/span 此路由与请求匹配具有一个名为chocolate的cookie该cookie的值与ch.p正则表达式匹配。 114.5标头路由谓词工厂 Header Route Predicate Factory具有两个参数标头name和regexp这是Java正则表达式。该谓词与具有给定名称的标头匹配并且值与正则表达式匹配。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: header_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Header/spanX-Request-Idspan stylecolor:#7f0055strong,/strong/span \d/span/span/span 如果请求具有名为X-Request-Id的标头且其值与\d正则表达式匹配具有一个或多个数字的值则此路由匹配。 114.6主机路由谓词工厂 Host Route Predicate Factory采用一个参数主机名patterns的列表。模式是Ant样式的模式以.作为分隔符。该谓词与匹配模式的Host头匹配。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: host_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Host/span**.somehost.org,**.anotherhost.org/span/span/span 还支持URI模板变量例如{sub}.myhost.org。 如果请求的Host标头的值为www.somehost.org或beta.somehost.org或www.anotherhost.org则此路由将匹配。 该谓词提取URI模板变量如上例中定义的sub作为名称和值的映射并使用在ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE中定义的键将其放置在ServerWebExchange.getAttributes()中。这些值可供GatewayFilter工厂使用。 114.7方法路线谓词工厂 Method路由谓词工厂采用一个methods参数该参数是一个或多个要匹配的HTTP方法。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: method_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Method/spanGET,POST/span/span/span 如果请求方法是GET或POST则此路由将匹配。 114.8路径路线谓词工厂 Path路由谓词工厂采用两个参数Spring PathMatcher patterns的列表和matchOptionalTrailingSeparator的可选标志。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: host_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/foo/{segment},/bar/{segmentspan stylecolor:#7f0055strong}/strong/span/span/span/span 如果请求路径为例如/foo/1或/foo/bar或/bar/baz则此路由将匹配。 该谓词提取URI模板变量如以上示例中定义的segment作为名称和值的映射并使用在ServerWebExchangeUtils.URI_TEMPLATE_VARIABLES_ATTRIBUTE中定义的键将其放置在ServerWebExchange.getAttributes()中。这些值可供GatewayFilter工厂使用。 可以使用实用程序方法来简化对这些变量的访问。 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8MapString, String uriVariables ServerWebExchangeUtils.getPathPredicateVariables(exchange);String segment uriVariables.get(span stylecolor:#2a00ffsegment/span);/span/span/span 114.9查询路由谓词工厂 Query Route Predicate Factory采用两个参数必需的param和可选的regexp这是Java正则表达式。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: query_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Query/spanbaz/span/span/span 如果请求包含baz查询参数则此路由将匹配。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: query_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Query/spanfoospan stylecolor:#7f0055strong,/strong/span ba./span/span/span 如果请求包含一个foo查询参数其值与ba.正则表达式匹配则此路由将匹配因此bar和baz将匹配。 114.10 RemoteAddr路由谓词工厂 RemoteAddr路由谓词工厂采用sources的列表最小大小1它是CIDR表示法IPv4或IPv6字符串例如192.168.0.1/16其中192.168.0.1是IP地址 16是子网掩码。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: remoteaddr_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - RemoteAddr/span192.168.1.1/24/span/span/span 如果请求的远程地址为192.168.1.10则此路由将匹配。 114.11重量路线谓词工厂 Weight Route Predicate Factory接受两个参数group和weight一个int。权重是按组计算的。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: weight_high span stylecolor:#7f007f uri/span: https://weighthigh.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Weight/spangroup1span stylecolor:#7f0055strong,/strong/span 8 span stylecolor:#7f007f - id/span: weight_low span stylecolor:#7f007f uri/span: https://weightlow.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Weight/spangroup1span stylecolor:#7f0055strong,/strong/span 2/span/span/span 此路由会将约80的流量转发到https://weighthigh.org并将约20的流量转发到https://weighlow.org 114.11.1修改解析远程地址的方式 默认情况下RemoteAddr路由谓词工厂使用传入请求中的远程地址。如果Spring Cloud网关位于代理层后面则此地址可能与实际的客户端IP地址不匹配。 您可以通过设置自定义RemoteAddressResolver来自定义解析远程地址的方式。Spring Cloud网关带有一个基于X-Forwarded-For标头 XForwardedRemoteAddressResolver的非默认远程地址解析器。 XForwardedRemoteAddressResolver有两个静态构造方法它们采用不同的安全性方法 XForwardedRemoteAddressResolver::trustAll返回一个RemoteAddressResolver该地址始终使用在X-Forwarded-For标头中找到的第一个IP地址。这种方法容易受到欺骗因为恶意客户端可能会为X-Forwarded-For设置一个初始值该初始值将被解析程序接受。 XForwardedRemoteAddressResolver::maxTrustedIndex获取一个索引该索引与在Spring Cloud网关前面运行的受信任基础结构的数量相关。例如如果Spring Cloud网关只能通过HAProxy访问则应使用值1。如果在访问Spring Cloud网关之前需要两跳可信基础结构则应使用值2。 给定以下标头值 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8X-Forwarded-For: 0.0.0.1, 0.0.0.2, 0.0.0.3/span/span/span 下面的maxTrustedIndex值将产生以下远程地址。 maxTrustedIndex结果 [Integer.MIN_VALUE,0] (invalid, IllegalArgumentException during initialization) 1 0.0.0.3 2 0.0.0.2 3 0.0.0.1 [4, Integer.MAX_VALUE] 0.0.0.1 使用Java配置 GatewayConfig.java span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8RemoteAddressResolver resolver XForwardedRemoteAddressResolver.maxTrustedIndex(1);....route(span stylecolor:#2a00ffdirect-route/span,r - r.remoteAddr(span stylecolor:#2a00ff10.1.1.1/span, span stylecolor:#2a00ff10.10.1.1/24/span).uri(span stylecolor:#2a00ffhttps://downstream1/span) .route(span stylecolor:#2a00ffproxied-route/span,r - r.remoteAddr(resolver, span stylecolor:#2a00ff10.10.1.1/span, span stylecolor:#2a00ff10.10.1.1/24/span).uri(span stylecolor:#2a00ffhttps://downstream2/span) )/span/span/span 115.网关过滤器工厂 路由过滤器允许以某种方式修改传入的HTTP请求或传出的HTTP响应。路由过滤器适用于特定路由。Spring Cloud网关包括许多内置的GatewayFilter工厂。 注意有关如何使用以下任何过滤器的更多详细示例请查看单元测试。 115.1 AddRequestHeader GatewayFilter工厂 AddRequestHeader GatewayFilter工厂采用name和value参数。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: add_request_header_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - AddRequestHeader/spanX-Request-Foospan stylecolor:#7f0055strong,/strong/span Bar/span/span/span 这会将X-Request-Foo:Bar标头添加到所有匹配请求的下游请求标头中。 AddRequestHeader知道用于匹配路径或主机的URI变量。URI变量可用于该值并将在运行时扩展。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: add_request_header_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/foo/{segmentspan stylecolor:#7f0055strong}/strong/span span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - AddRequestHeader/spanX-Request-Foospan stylecolor:#7f0055strong,/strong/span Bar-{segmentspan stylecolor:#7f0055strong}/strong/span/span/span/span 115.2 AddRequestParameter GatewayFilter工厂 AddRequestParameter GatewayFilter工厂采用name和value参数。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: add_request_parameter_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - AddRequestParameter/spanfoospan stylecolor:#7f0055strong,/strong/span bar/span/span/span 这会将foobar添加到所有匹配请求的下游请求的查询字符串中。 AddRequestParameter知道用于匹配路径或主机的URI变量。URI变量可用于该值并将在运行时扩展。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: add_request_parameter_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Host/span: {segment}.myhost.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - AddRequestParameter/spanfoospan stylecolor:#7f0055strong,/strong/span bar-{segmentspan stylecolor:#7f0055strong}/strong/span/span/span/span 115.3 AddResponseHeader GatewayFilter工厂 AddResponseHeader GatewayFilter工厂采用name和value参数。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: add_response_header_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - AddResponseHeader/spanX-Response-Foospan stylecolor:#7f0055strong,/strong/span Bar/span/span/span 这会将X-Response-Foo:Bar标头添加到所有匹配请求的下游响应的标头中。 AddResponseHeader知道用于匹配路径或主机的URI变量。URI变量可用于该值并将在运行时扩展。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: add_response_header_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Host/span: {segment}.myhost.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - AddResponseHeader/spanfoospan stylecolor:#7f0055strong,/strong/span bar-{segmentspan stylecolor:#7f0055strong}/strong/span/span/span/span 115.4 DedupeResponseHeader GatewayFilter工厂 DedupeResponseHeader GatewayFilter工厂采用name参数和可选的strategy参数。name可以包含标题名称列表以空格分隔。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: dedupe_response_header_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - DedupeResponseHeader/spanAccess-Control-Allow-Credentials Access-Control-Allow-Origin/span/span/span 在网关CORS逻辑和下游逻辑都将它们添加的情况下这将删除Access-Control-Allow-Credentials和Access-Control-Allow-Origin响应头的重复值。 DedupeResponseHeader过滤器还接受可选的strategy参数。可接受的值为RETAIN_FIRST默认值RETAIN_LAST和RETAIN_UNIQUE。 115.5 Hystrix GatewayFilter工厂 Hystrix是Netflix的一个库它实现了断路器模式。Hystrix GatewayFilter允许您将断路器引入网关路由保护服务免受级联故障的影响并允许您在下游故障的情况下提供后备响应。 要在您的项目中启用Hystrix GatewayFilters请添加对Spring Cloud Netflix中的 spring-cloud-starter-netflix-hystrix的依赖。 Hystrix GatewayFilter工厂需要一个name参数它是HystrixCommand的名称。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: hystrix_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - Hystrix/spanmyCommandName/span/span/span 这会将其余过滤器包装在命令名称为myCommandName的HystrixCommand中。 Hystrix过滤器还可以接受可选的fallbackUri参数。当前仅支持forward:计划的URI。如果调用了后备则请求将被转发到与URI相匹配的控制器。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: hystrix_route span stylecolor:#7f007f uri/span: lb://backing-service:8088 span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/consumingserviceendpoint span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: Hystrix span stylecolor:#7f007f args/span: span stylecolor:#7f007f name/span: fallbackcmd span stylecolor:#7f007f fallbackUri/span: forward:/incaseoffailureusethis span stylecolor:#7f007f - RewritePath/span/consumingserviceendpointspan stylecolor:#7f0055strong,/strong/span /backingserviceendpoint/span/span/span 调用Hystrix后备广告时它将转发到/incaseoffailureusethis URI。请注意此示例还通过目标URI上的lb前缀演示了可选Spring Cloud Netflix Ribbon负载均衡。 主要方案是将fallbackUri用于网关应用程序中的内部控制器或处理程序。但是也可以将请求重新路由到外部应用程序中的控制器或处理程序如下所示 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: ingredients span stylecolor:#7f007f uri/span: lb://ingredients span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span//ingredients/** span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: Hystrix span stylecolor:#7f007f args/span: span stylecolor:#7f007f name/span: fetchIngredients span stylecolor:#7f007f fallbackUri/span: forward:/fallback span stylecolor:#7f007f - id/span: ingredients-fallback span stylecolor:#7f007f uri/span: http://localhost:9994 span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/fallback/span/span/span 在此示例中网关应用程序中没有fallback端点或处理程序但是另一个应用程序中没有fallback端点或处理程序已在http://localhost:9994下注册。 如果将请求转发到后备则Hystrix网关过滤器还会提供引起请求的Throwable。它作为ServerWebExchangeUtils.HYSTRIX_EXECUTION_EXCEPTION_ATTR属性添加到ServerWebExchange中可以在网关应用程序中处理后备时使用。 对于外部控制器/处理程序方案可以添加带有异常详细信息的标头。您可以在FallbackHeaders GatewayFilter Factory部分中找到有关它的更多信息。 Hystrix设置例如超时可以使用全局默认值进行配置也可以使用Hystrix Wiki中所述的应用程序属性在逐条路由的基础上进行配置。 要为上述示例路由设置5秒超时将使用以下配置 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fhystrix.command.fallbackcmd.execution.isolation.thread.timeoutInMilliseconds/span: 5000/span/span/span 115.6 FallbackHeaders GatewayFilter工厂 FallbackHeaders工厂允许您在转发到外部应用程序中的fallbackUri的请求的标头中添加Hystrix执行异常详细信息例如以下情况 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: ingredients span stylecolor:#7f007f uri/span: lb://ingredients span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span//ingredients/** span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: Hystrix span stylecolor:#7f007f args/span: span stylecolor:#7f007f name/span: fetchIngredients span stylecolor:#7f007f fallbackUri/span: forward:/fallback span stylecolor:#7f007f - id/span: ingredients-fallback span stylecolor:#7f007f uri/span: http://localhost:9994 span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/fallback span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: FallbackHeaders span stylecolor:#7f007f args/span: span stylecolor:#7f007f executionExceptionTypeHeaderName/span: Test-Header/span/span/span 在此示例中在运行HystrixCommand时发生执行异常之后该请求将转发到fallback端点或运行在localhost:9994上的应用程序中的处理程序。具有异常类型消息和-if available-根本原因异常类型和消息的标头将由FallbackHeaders过滤器添加到该请求。 通过设置下面列出的参数的值及其默认值可以在配置中覆盖标头的名称 executionExceptionTypeHeaderName (Execution-Exception-Type)executionExceptionMessageHeaderName (Execution-Exception-Message)rootCauseExceptionTypeHeaderName (Root-Cause-Exception-Type)rootCauseExceptionMessageHeaderName (Root-Cause-Exception-Message) 您可以在Hystrix GatewayFilter工厂部分中找到有关Hystrix与Gateway一起工作的更多信息。 115.7 MapRequestHeader GatewayFilter工厂 MapRequestHeader GatewayFilter要素采用fromHeader和toHeader参数。它创建一个新的命名标头toHeader并从传入的HTTP请求中从现有的命名标头fromHeader中提取值。如果输入标头不存在则过滤器不起作用。如果新的命名标头已经存在则将使用新值扩充其值。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: map_request_header_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - MapRequestHeader/spanBarspan stylecolor:#7f0055strong,/strong/span X-Request-Foo/span/span/span 这会将X-Request-Foo:values标头添加到下游请求中并带有来自传入的HTTP请求Bar标头的更新值。 115.8 PrefixPath GatewayFilter工厂 PrefixPath GatewayFilter工厂采用单个prefix参数。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: prefixpath_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - PrefixPath/span/mypath/span/span/span 这会将/mypath作为所有匹配请求的路径的前缀。因此对/hello的请求将被发送到/mypath/hello。 115.9 PreserveHostHeader GatewayFilter工厂 PreserveHostHeader GatewayFilter工厂没有参数。该过滤器设置请求属性路由过滤器将检查该请求属性以确定是否应发送原始主机头而不是由HTTP客户端确定的主机头。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: preserve_host_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span:- PreserveHostHeader/span/span/span 115.10 RequestRateLimiter GatewayFilter工厂 RequestRateLimiter GatewayFilter工厂使用RateLimiter实现来确定是否允许继续当前请求。如果不是则返回状态HTTP 429 - Too Many Requests默认。 该过滤器采用一个可选的keyResolver参数和特定于速率限制器的参数请参见下文。 keyResolver是实现KeyResolver接口的bean。在配置中使用SpEL通过名称引用bean。#{myKeyResolver}是引用名称为myKeyResolver的bean的SpEL表达式。 KeyResolver.java。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055stronginterface/strong/span KeyResolver {MonoString resolve(ServerWebExchange exchange); }/span/span/span KeyResolver接口允许可插拔策略派生用于限制请求的密钥。在未来的里程碑中将有一些KeyResolver实现。 KeyResolver的默认实现是PrincipalNameKeyResolver它从ServerWebExchange检索Principal并调用Principal.getName()。 默认情况下如果KeyResolver未找到密钥则请求将被拒绝。可以使用spring.cloud.gateway.filter.request-rate-limiter.deny-empty-key对或错和spring.cloud.gateway.filter.request-rate-limiter.empty-key-status-code属性来调整此行为。 无法通过“快捷方式”符号配置RequestRateLimiter。以下示例无效 application.properties。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8# INVALID SHORTCUT CONFIGURATION spring.cloud.gateway.routes[0].filters[0]RequestRateLimiter2, 2, #{userkeyresolver}/span/span/span 115.10.1 Redis RateLimiter redis实现基于Stripe所做的工作。它需要使用spring-boot-starter-data-redis-reactive Spring Boot起动器。 使用的算法是令牌桶算法。 redis-rate-limiter.replenishRate是您希望用户每秒允许多少个请求而没有任何丢弃的请求。这是令牌桶被填充的速率。 redis-rate-limiter.burstCapacity是允许用户在一秒钟内执行的最大请求数。这是令牌桶可以容纳的令牌数。将此值设置为零将阻止所有请求。 通过在replenishRate和burstCapacity中设置相同的值可以达到稳定的速率。通过将burstCapacity设置为高于replenishRate可以允许临时突发。在这种情况下速率限制器需要在突发之间间隔一段时间根据replenishRate因为2个连续的突发将导致请求丢失HTTP 429 - Too Many Requests。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: requestratelimiter_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: RequestRateLimiter span stylecolor:#7f007f args/span: span stylecolor:#7f007f redis-rate-limiter.replenishRate/span: 10 span stylecolor:#7f007f redis-rate-limiter.burstCapacity/span: 20/span/span/span Config.java。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8emspan stylecolor:grayBean/span/em KeyResolver userKeyResolver() {span stylecolor:#7f0055strongreturn/strong/span exchange - Mono.just(exchange.getRequest().getQueryParams().getFirst(span stylecolor:#2a00ffuser/span)); }/span/span/span 这定义了每个用户10的请求速率限制。允许20个突发但是下一秒只有10个请求可用。KeyResolver是一个简单的参数它获取user请求参数注意不建议在生产中使用。 速率限制器也可以定义为实现RateLimiter接口的bean。在配置中使用SpEL通过名称引用bean。#{myRateLimiter}是一个SpEL表达式引用名称为myRateLimiter的bean。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: requestratelimiter_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: RequestRateLimiter span stylecolor:#7f007f args/span: span stylecolor:#7f007f rate-limiter/span: span stylecolor:#2a00ff#{myRateLimiter}/span span stylecolor:#7f007f key-resolver/span: span stylecolor:#2a00ff#{userKeyResolver}/span/span/span/span 115.11重定向到GatewayFilter工厂 RedirectTo GatewayFilter工厂采用一个status和一个url参数。状态应该是300系列重定向http代码例如301。URL应该是有效的URL。这将是Location标头的值。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: prefixpath_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - RedirectTo/span302span stylecolor:#7f0055strong,/strong/span https://acme.org/span/span/span 这将发送带有Location:https://acme.org标头的状态302以执行重定向。 115.12 RemoveRequestHeader GatewayFilter工厂 RemoveRequestHeader GatewayFilter工厂采用一个name参数。它是要删除的标题的名称。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: removerequestheader_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - RemoveRequestHeader/spanX-Request-Foo/span/span/span 这将删除X-Request-Foo标头然后将其发送到下游。 115.13 RemoveResponseHeader GatewayFilter工厂 RemoveResponseHeader GatewayFilter工厂采用一个name参数。它是要删除的标题的名称。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: removeresponseheader_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - RemoveResponseHeader/spanX-Response-Foo/span/span/span 这会将X-Response-Foo标头从响应中删除然后将其返回到网关客户端。 要删除任何类型的敏感标头应为可能需要的任何路由配置此过滤器。此外您可以使用spring.cloud.gateway.default-filters一次配置此过滤器并将其应用于所有路由。 115.14 RewritePath GatewayFilter工厂 RewritePath GatewayFilter工厂采用路径regexp参数和replacement参数。这使用Java正则表达式提供了一种灵活的方式来重写请求路径。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: rewritepath_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/foo/** span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - RewritePath/span/foo(?segment/?.*)span stylecolor:#7f0055strong,/strong/span $\{segmentspan stylecolor:#7f0055strong}/strong/span/span/span/span 对于/foo/bar的请求路径这将在发出下游请求之前将路径设置为/bar。请注意由于YAML规范$\被$所取代。 115.15 RewriteLocationResponseHeader GatewayFilter工厂 RewriteLocationResponseHeader GatewayFilter工厂通常会修改Location响应标头的值以摆脱后端特定的详细信息。它需要stripVersionModelocationHeaderNamehostValue和protocolsRegex参数。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: rewritelocationresponseheader_route span stylecolor:#7f007f uri/span: http://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - RewriteLocationResponseHeader/spanAS_IN_REQUESTspan stylecolor:#7f0055strong,/strong/span Locationspan stylecolor:#7f0055strong,/strong/span span stylecolor:#7f0055strong,/strong/span/span/span/span 例如对于请求POST https://api.example.com/some/object/nameLocation响应标头值https://object-service.prod.example.net/v2/some/object/id将被重写为https://api.example.com/some/object/id。 参数stripVersionMode具有以下可能的值NEVER_STRIPAS_IN_REQUEST默认ALWAYS_STRIP。 NEVER_STRIP-即使原始请求路径不包含版本也不会剥离版本AS_IN_REQUEST-仅当原始请求路径不包含版本时版本才会被剥离ALWAYS_STRIP-即使原始请求路径包含版本也会剥离版本 参数hostValue如果提供将用于替换响应Location标头中的host:port部分。如果未提供将使用Host请求标头的值。 参数protocolsRegex必须是有效的正则表达式String协议名称将与之匹配。如果不匹配过滤器将不执行任何操作。默认值为http|https|ftp|ftps。 115.16 RewriteResponseHeader GatewayFilter工厂 RewriteResponseHeader GatewayFilter工厂采用nameregexp和replacement参数。它使用Java正则表达式以灵活的方式重写响应标头值。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: rewriteresponseheader_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - RewriteResponseHeader/spanX-Response-Foospan stylecolor:#7f0055strong,/strong/span span stylecolor:#7f0055strong,/strong/span password[^]span stylecolor:#7f0055strong,/strong/span password***/span/span/span 对于标头值为/42?userfordpasswordomg!whatflagtrue在发出下游请求后它将被设置为/42?userfordpassword***flagtrue。由于YAML规范请使用$\来表示$。 115.17 SaveSession GatewayFilter工厂 在向下游转发呼叫之前SaveSession GatewayFilter工厂强制执行WebSession::save操作。这在将Spring Session之类的内容用于惰性数据存储并且需要确保在进行转接呼叫之前已保存会话状态时特别有用。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: save_session span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/foo/** span stylecolor:#7f007f filters/span:- SaveSession/span/span/span 如果您将Spring Security与Spring Session 集成在一起并且想要确保安全性详细信息已转发到远程进程则至关重要。 115.18 SecureHeaders GatewayFilter工厂 SecureHeaders GatewayFilter Factory根据此博客文章的建议向响应中添加了许多标头。 添加了以下标头以及默认值 X-Xss-Protection:1; modeblockStrict-Transport-Security:max-age631138519X-Frame-Options:DENYX-Content-Type-Options:nosniffReferrer-Policy:no-referrerContent-Security-Policy:default-src self https:; font-src self https: data:; img-src self https: data:; object-src none; script-src https:; style-src self https: unsafe-inlineX-Download-Options:noopenX-Permitted-Cross-Domain-Policies:none 要更改默认值请在spring.cloud.gateway.filter.secure-headers名称空间中设置适当的属性 Property进行更改 xss-protection-headerstrict-transport-securityframe-optionscontent-type-optionsreferrer-policycontent-security-policydownload-optionspermitted-cross-domain-policies 要禁用默认值请使用逗号分隔值设置属性spring.cloud.gateway.filter.secure-headers.disable。 需要使用小写和安全标头的全名。 可以使用以下值 x-xss-protectionstrict-transport-securityx-frame-optionsx-content-type-optionsreferrer-policycontent-security-policyx-download-optionsx-permitted-cross-domain-policies 例 spring.cloud.gateway.filter.secure-headers.disablex-frame-options,strict-transport-security 115.19 SetPath GatewayFilter工厂 SetPath GatewayFilter工厂采用路径template参数。通过允许路径的模板段它提供了一种操作请求路径的简单方法。这将使用Spring Framework中的uri模板。允许多个匹配段。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: setpath_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/foo/{segmentspan stylecolor:#7f0055strong}/strong/span span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - SetPath/span/{segmentspan stylecolor:#7f0055strong}/strong/span/span/span/span 对于/foo/bar的请求路径这将在发出下游请求之前将路径设置为/bar。 115.20 SetRequestHeader GatewayFilter工厂 SetRequestHeader GatewayFilter工厂采用name和value参数。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: setrequestheader_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - SetRequestHeader/spanX-Request-Foospan stylecolor:#7f0055strong,/strong/span Bar/span/span/span 该GatewayFilter用给定的名称替换所有标头而不是添加。因此如果下游服务器响应X-Request-Foo:1234则将其替换为X-Request-Foo:Bar下游服务将收到此信息。 SetRequestHeader知道用于匹配路径或主机的URI变量。URI变量可用于该值并将在运行时扩展。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: setrequestheader_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Host/span: {segment}.myhost.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - SetRequestHeader/spanfoospan stylecolor:#7f0055strong,/strong/span bar-{segmentspan stylecolor:#7f0055strong}/strong/span/span/span/span 115.21 SetResponseHeader GatewayFilter工厂 SetResponseHeader GatewayFilter工厂采用name和value参数。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: setresponseheader_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - SetResponseHeader/spanX-Response-Foospan stylecolor:#7f0055strong,/strong/span Bar/span/span/span 该GatewayFilter用给定的名称替换所有标头而不是添加。因此如果下游服务器以X-Response-Foo:1234响应则将其替换为X-Response-Foo:Bar这是网关客户端将收到的内容。 SetResponseHeader知道用于匹配路径或主机的URI变量。URI变量可用于该值并将在运行时扩展。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: setresponseheader_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Host/span: {segment}.myhost.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - SetResponseHeader/spanfoospan stylecolor:#7f0055strong,/strong/span bar-{segmentspan stylecolor:#7f0055strong}/strong/span/span/span/span 115.22 SetStatus GatewayFilter工厂 SetStatus GatewayFilter工厂采用单个status参数。它必须是有效的Spring HttpStatus。它可以是整数值404也可以是枚举NOT_FOUND的字符串表示形式。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: setstatusstring_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - SetStatus/spanBAD_REQUEST span stylecolor:#7f007f - id/span: setstatusint_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - SetStatus/span401/span/span/span 无论哪种情况响应的HTTP状态都将设置为401。 115.23 StripPrefix GatewayFilter工厂 StripPrefix GatewayFilter工厂采用一个参数parts。parts参数指示在向下游发送请求之前要从请求中剥离的路径中的零件数。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: nameRoot span stylecolor:#7f007f uri/span: http://nameservice span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/name/** span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - StripPrefix/span2/span/span/span 通过网关发送到/name/bar/foo的请求时对nameservice的请求将类似于http://nameservice/foo。 115.24重试GatewayFilter工厂 Retry GatewayFilter Factory支持以下参数集 retries应尝试重试的次数statuses应重试的HTTP状态代码用org.springframework.http.HttpStatus表示methods应重试的HTTP方法使用org.springframework.http.HttpMethod表示series要重试的一系列状态代码使用org.springframework.http.HttpStatus.Series表示exceptions应重试引发的异常列表backoff为重试配置了指数补偿。重试在退避间隔firstBackoff * (factor ^ n)之后执行其中n是迭代。如果配置了maxBackoff则应用的最大退避将被限制为maxBackoff。如果basedOnPreviousValue为true将使用prevBackoff * factor计算退避。 如果启用了Retry过滤器则会配置以下默认值 retries-3次series — 5XX系列methods — GET方法exceptions-IOException和TimeoutExceptionbackoff-已禁用 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: retry_test span stylecolor:#7f007f uri/span: http://localhost:8080/flakey span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Host/span*.retry.com span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: Retry span stylecolor:#7f007f args/span: span stylecolor:#7f007f retries/span: 3 span stylecolor:#7f007f statuses/span: BAD_GATEWAY span stylecolor:#7f007f methods/span: GET,POST span stylecolor:#7f007f backoff/span: span stylecolor:#7f007f firstBackoff/span: 10ms span stylecolor:#7f007f maxBackoff/span: 50ms span stylecolor:#7f007f factor/span: 2 span stylecolor:#7f007f basedOnPreviousValue/span: span stylecolor:#7f0055strongfalse/strong/span/span/span/span 当使用带有forward:前缀URL的重试过滤器时应仔细编写目标端点以便在发生错误的情况下不会执行任何可能导致响应发送到客户端并提交的操作。例如如果目标端点是带注释的控制器则目标控制器方法不应返回带有错误状态代码的ResponseEntity。相反它应该抛出一个Exception或者例如通过一个Mono.error(ex)返回值来发出错误信号可以将重试过滤器配置为通过重试来处理。 当将重试过滤器与任何具有主体的HTTP方法一起使用时主体将被缓存并且网关将受到内存的限制。正文被缓存在ServerWebExchangeUtils.CACHED_REQUEST_BODY_ATTR定义的请求属性中。对象的类型是org.springframework.core.io.buffer.DataBuffer。 115.25 RequestSize GatewayFilter工厂 当请求大小大于允许的限制时RequestSize GatewayFilter工厂可以限制请求到达下游服务。过滤器采用maxSize参数该参数是请求的允许大小限制。maxSize is a DataSize类型因此值可以定义为数字后跟可选的DataUnit后缀例如KB或MB。字节的默认值为“ B”。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: request_size_route span stylecolor:#7f007f uri/span: http://localhost:8080/upload span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/upload span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: RequestSize span stylecolor:#7f007f args/span: span stylecolor:#7f007f maxSize/span: 5000000/span/span/span 当请求因大小而被拒绝时RequestSize GatewayFilter Factory将响应状态设置为413 Payload Too Large并带有一个附加报头errorMessage。以下是此类errorMessage的示例。 errorMessage : Request size is larger than permissible limit. Request size is 6.0 MB where permissible limit is 5.0 MB 如果未在路由定义中作为过滤器参数提供则默认请求大小将设置为5 MB。 115.26修改请求正文GatewayFilter工厂 该过滤器被认为是BETAAPI将来可能会更改 ModifyRequestBody过滤器可用于在网关向下游发送请求主体之前修改请求主体。 只能使用Java DSL配置此过滤器 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8emspan stylecolor:grayBean/span/em span stylecolor:#7f0055strongpublic/strong/span RouteLocator routes(RouteLocatorBuilder builder) {span stylecolor:#7f0055strongreturn/strong/span builder.routes().route(span stylecolor:#2a00ffrewrite_request_obj/span, r - r.host(span stylecolor:#2a00ff*.rewriterequestobj.org/span).filters(f - f.prefixPath(span stylecolor:#2a00ff/httpbin/span).modifyRequestBody(String.span stylecolor:#7f0055strongclass/strong/span, Hello.span stylecolor:#7f0055strongclass/strong/span, MediaType.APPLICATION_JSON_VALUE,(exchange, s) - span stylecolor:#7f0055strongreturn/strong/span Mono.just(span stylecolor:#7f0055strongnew/strong/span Hello(s.toUpperCase())))).uri(uri)).build(); }span stylecolor:#7f0055strongstatic/strong/span span stylecolor:#7f0055strongclass/strong/span Hello {String message;span stylecolor:#7f0055strongpublic/strong/span Hello() { }span stylecolor:#7f0055strongpublic/strong/span Hello(String message) {span stylecolor:#7f0055strongthis/strong/span.message message;}span stylecolor:#7f0055strongpublic/strong/span String getMessage() {span stylecolor:#7f0055strongreturn/strong/span message;}span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongvoid/strong/span setMessage(String message) {span stylecolor:#7f0055strongthis/strong/span.message message;} }/span/span/span 115.27修改响应主体GatewayFilter工厂 该过滤器被认为是BETAAPI将来可能会更改 ModifyResponseBody过滤器可用于在将响应正文发送回客户端之前对其进行修改。 只能使用Java DSL配置此过滤器 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8emspan stylecolor:grayBean/span/em span stylecolor:#7f0055strongpublic/strong/span RouteLocator routes(RouteLocatorBuilder builder) {span stylecolor:#7f0055strongreturn/strong/span builder.routes().route(span stylecolor:#2a00ffrewrite_response_upper/span, r - r.host(span stylecolor:#2a00ff*.rewriteresponseupper.org/span).filters(f - f.prefixPath(span stylecolor:#2a00ff/httpbin/span).modifyResponseBody(String.span stylecolor:#7f0055strongclass/strong/span, String.span stylecolor:#7f0055strongclass/strong/span,(exchange, s) - Mono.just(s.toUpperCase()))).uri(uri).build(); }/span/span/span 115.28默认过滤器 如果您要添加过滤器并将其应用于所有路由则可以使用spring.cloud.gateway.default-filters。该属性采用过滤器列表 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f default-filters/span: span stylecolor:#7f007f - AddResponseHeader/spanX-Response-Default-Foospan stylecolor:#7f0055strong,/strong/span Default-Bar span stylecolor:#7f007f - PrefixPath/span/httpbin/span/span/span 116.全局过滤器 GlobalFilter接口具有与GatewayFilter相同的签名。这些是特殊过滤器有条件地应用于所有路由。此接口和用法可能会在将来的里程碑中更改。 116.1组合的全局过滤器和GatewayFilter排序 当有请求进入并与路由匹配时过滤Web处理程序会将GlobalFilter的所有实例和GatewayFilter的所有特定于路由的实例添加到过滤器链中。该组合的过滤器链通过org.springframework.core.Ordered接口排序可以通过实现getOrder()方法进行设置。 由于Spring Cloud网关区分执行过滤器逻辑的“前”阶段和“后”阶段请参阅工作原理因此具有最高优先级的过滤器将在“前”阶段中处于第一个阶段在“阶段”中处于最后一个阶段。 “后期”阶段。 ExampleConfiguration.java。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8emspan stylecolor:grayBean/span/em span stylecolor:#7f0055strongpublic/strong/span GlobalFilter customFilter() {span stylecolor:#7f0055strongreturn/strong/span span stylecolor:#7f0055strongnew/strong/span CustomGlobalFilter(); }span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongclass/strong/span CustomGlobalFilter span stylecolor:#7f0055strongimplements/strong/span GlobalFilter, Ordered {emspan stylecolor:grayOverride/span/emspan stylecolor:#7f0055strongpublic/strong/span MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info(span stylecolor:#2a00ffcustom global filter/span);span stylecolor:#7f0055strongreturn/strong/span chain.filter(exchange);}emspan stylecolor:grayOverride/span/emspan stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongint/strong/span getOrder() {span stylecolor:#7f0055strongreturn/strong/span -1;} }/span/span/span 116.2转发路由过滤器 ForwardRoutingFilter在交换属性ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR中寻找URI。如果该网址具有forward方案即forward:///localendpoint它将使用Spring DispatcherHandler处理请求。请求URL的路径部分将被转发URL中的路径覆盖。未经修改的原始URL会附加到ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR属性中的列表中。 116.3 LoadBalancerClient筛选器 LoadBalancerClientFilter在交换属性ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR中寻找URI。如果该网址具有lb方案即lb://myservice它将使用Spring Cloud LoadBalancerClient将名称上例中为myservice解析为实际的主机和端口并替换相同属性中的URI。未经修改的原始URL会附加到ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR属性中的列表中。过滤器还将查看ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR属性以查看其是否等于lb然后应用相同的规则。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: myRoute span stylecolor:#7f007f uri/span: lb://service span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/service/**/span/span/span 默认情况下当在LoadBalancer中找不到服务实例时将返回503。您可以通过设置spring.cloud.gateway.loadbalancer.use404true来配置网关以返回404。 从LoadBalancer返回的ServiceInstance的isSecure值将覆盖对网关的请求中指定的方案。例如如果请求通过HTTPS进入网关但ServiceInstance表示它不安全则下游请求将通过HTTP发出。相反的情况也可以适用。但是如果在网关配置中为路由指定了GATEWAY_SCHEME_PREFIX_ATTR则前缀将被删除并且来自路由URL的结果方案将覆盖ServiceInstance配置。 LoadBalancerClientFilter在引擎盖下使用阻挡物Ribbon LoadBalancerClient。我们建议您改用ReactiveLoadBalancerClientFilter。您可以通过向项目添加org.springframework.cloud:spring-cloud-loadbalancer依赖项并将spring.cloud.loadbalancer.ribbon.enabled的值设置为false来切换为使用它。 116.4 ReactiveLoadBalancerClientFilter ReactiveLoadBalancerClientFilter在交换属性ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR中寻找URI。如果该网址具有lb方案即lb://myservice它将使用Spring Cloud ReactorLoadBalancer将名称上例中为myservice解析为实际的主机和端口并替换相同属性中的URI。未经修改的原始URL会附加到ServerWebExchangeUtils.GATEWAY_ORIGINAL_REQUEST_URL_ATTR属性中的列表中。过滤器还将查看ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR属性以查看其是否等于lb然后应用相同的规则。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: myRoute span stylecolor:#7f007f uri/span: lb://service span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/service/**/span/span/span 默认情况下当ReactorLoadBalancer无法找到服务实例时将返回503。您可以通过设置spring.cloud.gateway.loadbalancer.use404true将网关配置为返回404。 从ReactiveLoadBalancerClientFilter返回的ServiceInstance的isSecure值将覆盖对网关的请求中指定的方案。例如如果请求通过HTTPS进入网关但ServiceInstance表示它不安全则下游请求将通过HTTP发出。相反的情况也可以适用。但是如果在网关配置中为路由指定了GATEWAY_SCHEME_PREFIX_ATTR则前缀将被删除并且从路由URL生成的方案将覆盖ServiceInstance配置。 116.5网络路由过滤器 如果位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中的URL具有http或https方案则将运行Netty路由筛选器。它使用Netty HttpClient发出下游代理请求。响应将放在ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR交换属性中以供以后的过滤器使用。有一个实验性WebClientHttpRoutingFilter它执行相同的功能但不需要净值 116.6 Netty写响应过滤器 如果ServerWebExchangeUtils.CLIENT_RESPONSE_ATTR交换属性中有净值HttpClientResponse则NettyWriteResponseFilter将运行。它在所有其他筛选器完成后运行并将代理响应写回到网关客户端响应。有一个实验性WebClientWriteResponseFilter它执行相同的功能但不需要净值 116.7 RouteToRequestUrl过滤器 如果ServerWebExchangeUtils.GATEWAY_ROUTE_ATTR交换属性中存在Route对象则RouteToRequestUrlFilter将运行。它基于请求URI创建一个新URI但使用Route对象的URI属性进行了更新。新的URI放置在ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中。 如果URI具有方案前缀例如lb:ws://serviceid则将从URI中剥离lb方案并将其放在ServerWebExchangeUtils.GATEWAY_SCHEME_PREFIX_ATTR中以供以后在过滤器链中使用。 116.8 Websocket路由过滤器 如果位于ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR交换属性中的URL具有ws或wss方案则Websocket路由筛选器将运行。它使用Spring Web套接字基础结构向下游转发Websocket请求。 通过在URI前面加上lb例如lb:ws://serviceid可以实现Websocket的负载均衡。 如果您将SockJS用作常规http的后​​备则应配置常规HTTP路由以及Websocket路由。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span:span stylecolor:#3f5f5fem# SockJS route/em/span span stylecolor:#7f007f - id/span: websocket_sockjs_route span stylecolor:#7f007f uri/span: http://localhost:3001 span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/websocket/info/**span stylecolor:#3f5f5fem# Normal Websocket route/em/span span stylecolor:#7f007f - id/span: websocket_route span stylecolor:#7f007f uri/span: ws://localhost:3001 span stylecolor:#7f007f predicates/span: span stylecolor:#7f007f - Path/span/websocket/**/span/span/span 116.9网关指标过滤器 要启用网关度量标准请添加spring-boot-starter-actuator作为项目依赖项。然后默认情况下只要属性spring.cloud.gateway.metrics.enabled未设置为false网关度量过滤器就会运行。该过滤器添加了一个带有以下标记的名为“ gateway.requests”的计时器指标 routeId路线IDrouteUriAPI将被路由到的URIoutcome根据HttpStatus.Series分类的结果status返回给客户端的请求的Http状态httpStatusCode返回给客户端的请求的Http状态httpMethod用于请求的Http方法 然后可以从/actuator/metrics/gateway.requests 抓取 这些指标并且可以轻松地将其与Prometheus集成以创建Grafana 仪表板。 要启用Prometheus端点请添加micrometer-registry-prometheus作为项目依赖项。 116.10将交换标记为已路由 网关路由ServerWebExchange后它将通过在交换属性中添加gatewayAlreadyRouted将该交换标记为“已路由”。将请求标记为已路由后其他路由筛选器将不会再次路由请求实质上会跳过该筛选器。您可以使用多种便捷方法将交换标记为已路由或者检查交换是否已路由。 ServerWebExchangeUtils.isAlreadyRouted接受ServerWebExchange对象并检查其是否已“路由”ServerWebExchangeUtils.setAlreadyRouted接受ServerWebExchange对象并将其标记为“已路由” 117. HttpHeadersFilters HttpHeadersFilters在向下游发送请求之前例如在NettyRoutingFilter中已应用于请求。 117.1转发的标题过滤器 Forwarded标头过滤器创建一个Forwarded标头以发送到下游服务。它将当前请求的Host标头方案和端口添加到任何现有的Forwarded标头中。 117.2 RemoveHopByHop标头过滤器 RemoveHopByHop标头过滤器从转发的请求中删除标头。被删除的头的默认列表来自IETF。 默认删除的标题为 连接活着代理验证代理授权TE预告片传输编码升级 要更改此设置请将spring.cloud.gateway.filter.remove-non-proxy-headers.headers属性设置为要删除的标头名称列表。 117.3 XForwarded标头过滤器 XForwarded标头过滤器创建各种X-Forwarded-*标头以发送到下游服务。它使用Host头当前请求的方案端口和路径来创建各种头。 可以通过以下布尔属性默认为true控制单个标题的创建 spring.cloud.gateway.x-forwarded.for.enabledspring.cloud.gateway.x-forwarded.host.enabledspring.cloud.gateway.x-forwarded.port.enabledspring.cloud.gateway.x-forwarded.proto.enabledspring.cloud.gateway.x-forwarded.prefix.enabled 可以通过以下布尔属性默认为true控制追加多个标头 spring.cloud.gateway.x-forwarded.for.appendspring.cloud.gateway.x-forwarded.host.appendspring.cloud.gateway.x-forwarded.port.appendspring.cloud.gateway.x-forwarded.proto.appendspring.cloud.gateway.x-forwarded.prefix.append 118. TLS / SSL 网关可以通过遵循常规的Spring服务器配置来侦听https上的请求。例 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fserver/span: span stylecolor:#7f007f ssl/span: span stylecolor:#7f007f enabled/span: span stylecolor:#7f0055strongtrue/strong/span span stylecolor:#7f007f key-alias/span: scg span stylecolor:#7f007f key-store-password/span: scg1234 span stylecolor:#7f007f key-store/span: classpath:scg-keystore.p12 span stylecolor:#7f007f key-store-type/span: PKCS12/span/span/span 网关路由可以同时路由到http和https后端。如果路由到https后端则可以使用以下配置将网关配置为信任所有下游证书 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f httpclient/span: span stylecolor:#7f007f ssl/span: span stylecolor:#7f007f useInsecureTrustManager/span: span stylecolor:#7f0055strongtrue/strong/span/span/span/span 使用不安全的信任管理器不适用于生产。对于生产部署可以为网关配置一组可以通过以下配置信任的已知证书 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f httpclient/span: span stylecolor:#7f007f ssl/span: span stylecolor:#7f007f trustedX509Certificates/span:- cert1.pem- cert2.pem/span/span/span 如果Spring Cloud网关未配置受信任的证书则使用默认的信任存储可以使用系统属性javax.net.ssl.trustStore覆盖。 118.1 TLS握手 网关维护一个客户端池该客户端池用于路由到后端。通过https进行通信时客户端会启动TLS握手。许多超时与此握手相关联。可以配置以下超时显示默认值 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f httpclient/span: span stylecolor:#7f007f ssl/span: span stylecolor:#7f007f handshake-timeout-millis/span: 10000 span stylecolor:#7f007f close-notify-flush-timeout-millis/span: 3000 span stylecolor:#7f007f close-notify-read-timeout-millis/span: 0/span/span/span 119.配置 Spring Cloud网关的配置由RouteDefinitionLocator的集合驱动。 RouteDefinitionLocator.java。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055stronginterface/strong/span RouteDefinitionLocator {FluxRouteDefinition getRouteDefinitions(); }/span/span/span 默认情况下PropertiesRouteDefinitionLocator使用Spring Boot的ConfigurationProperties机制加载属性。 上面的所有配置示例都使用一种快捷方式符号该快捷方式符号使用位置参数而不是命名参数。以下两个示例是等效的 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f routes/span: span stylecolor:#7f007f - id/span: setstatus_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - name/span: SetStatus span stylecolor:#7f007f args/span: span stylecolor:#7f007f status/span: 401 span stylecolor:#7f007f - id/span: setstatusshortcut_route span stylecolor:#7f007f uri/span: https://example.org span stylecolor:#7f007f filters/span: span stylecolor:#7f007f - SetStatus/span401/span/span/span 对于网关的某些用法属性将是足够的但某些生产用例将受益于从外部源例如数据库加载配置。未来的里程碑版本将基于Spring Data Repositories实现RouteDefinitionLocator实现例如RedisMongoDB和Cassandra。 119.1 Fluent Java Routes API 为了在Java中进行简单的配置在RouteLocatorBuilder bean中定义了一个流畅的API。 GatewaySampleApplication.java。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#3f5f5fem// static imports from GatewayFilters and RoutePredicates/em/span emspan stylecolor:grayBean/span/em span stylecolor:#7f0055strongpublic/strong/span RouteLocator customRouteLocator(RouteLocatorBuilder builder, ThrottleGatewayFilterFactory throttle) {span stylecolor:#7f0055strongreturn/strong/span builder.routes().route(r - r.host(span stylecolor:#2a00ff**.abc.org/span).and().path(span stylecolor:#2a00ff/image/png/span).filters(f -f.addResponseHeader(span stylecolor:#2a00ffX-TestHeader/span, span stylecolor:#2a00fffoobar/span)).uri(span stylecolor:#2a00ffhttp://httpbin.org:80/span)).route(r - r.path(span stylecolor:#2a00ff/image/webp/span).filters(f -f.addResponseHeader(span stylecolor:#2a00ffX-AnotherHeader/span, span stylecolor:#2a00ffbaz/span)).uri(span stylecolor:#2a00ffhttp://httpbin.org:80/span)).route(r - r.order(-1).host(span stylecolor:#2a00ff**.throttle.org/span).and().path(span stylecolor:#2a00ff/get/span).filters(f - f.filter(throttle.apply(1,1,10,TimeUnit.SECONDS))).uri(span stylecolor:#2a00ffhttp://httpbin.org:80/span)).build(); }/span/span/span 此样式还允许更多自定义谓词断言。RouteDefinitionLocator beans定义的谓词使用逻辑and进行组合。通过使用流畅的Java API您可以在Predicate类上使用and()or()和negate()运算符。 119.2 DiscoveryClient路由定义定位器 可以将网关配置为基于在DiscoveryClient兼容服务注册表中注册的服务来创建路由。 要启用此功能请设置spring.cloud.gateway.discovery.locator.enabledtrue并确保在类路径上启用了DiscoveryClient实现例如Netflix EurekaConsul或Zookeeper。 119.2.1为DiscoveryClient路由配置谓词和过滤器 默认情况下网关为通过DiscoveryClient创建的路由定义单个谓词和过滤器。 默认谓词是使用模式/serviceId/**定义的路径谓词其中serviceId是DiscoveryClient中服务的ID。 缺省过滤器是带有正则表达式/serviceId/(?remaining.*)和替换文本/${remaining}的重写路径过滤器。这只是在将请求发送到下游之前从路径中剥离服务ID。 如果要自定义DiscoveryClient路由使用的谓词和/或过滤器可以通过设置spring.cloud.gateway.discovery.locator.predicates[x]和spring.cloud.gateway.discovery.locator.filters[y]来实现。这样做时如果要保留该功能则需要确保在上面包含默认谓词和过滤器。以下是此示例的示例。 application.properties。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8spring.cloud.gateway.discovery.locator.predicates[0].name: Path spring.cloud.gateway.discovery.locator.predicates[0].args[pattern]: /serviceId/** spring.cloud.gateway.discovery.locator.predicates[1].name: Host spring.cloud.gateway.discovery.locator.predicates[1].args[pattern]: **.foo.com spring.cloud.gateway.discovery.locator.filters[0].name: Hystrix spring.cloud.gateway.discovery.locator.filters[0].args[name]: serviceId spring.cloud.gateway.discovery.locator.filters[1].name: RewritePath spring.cloud.gateway.discovery.locator.filters[1].args[regexp]: / serviceId /(?remaining.*) spring.cloud.gateway.discovery.locator.filters[1].args[replacement]: /${remaining}/span/span/span 120. Reactor Netty访问日志 要启用Reactor Netty访问日志请设置-Dreactor.netty.http.server.accessLogEnabledtrue。它必须是Java系统Property而不是Spring Boot属性。 日志系统可以配置为具有单独的访问日志文件。以下是示例登录配置 logback.xml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8 span stylecolor:#3f7f7fappender/span span stylecolor:#7f007fname/spanspan stylecolor:#2a00ffaccessLog/span span stylecolor:#7f007fclass/spanspan stylecolor:#2a00ffch.qos.logback.core.FileAppender/spanspan stylecolor:#3f7f7f/spanspan stylecolor:#3f7f7ffile/spanaccess_log.logspan stylecolor:#3f7f7f/file/spanspan stylecolor:#3f7f7fencoder/spanspan stylecolor:#3f7f7fpattern/span%msg%nspan stylecolor:#3f7f7f/pattern/spanspan stylecolor:#3f7f7f/encoder/spanspan stylecolor:#3f7f7f/appender/spanspan stylecolor:#3f7f7fappender/span span stylecolor:#7f007fname/spanspan stylecolor:#2a00ffasync/span span stylecolor:#7f007fclass/spanspan stylecolor:#2a00ffch.qos.logback.classic.AsyncAppender/spanspan stylecolor:#3f7f7f/spanspan stylecolor:#3f7f7fappender-ref/span span stylecolor:#7f007fref/spanspan stylecolor:#2a00ffaccessLog/spanspan stylecolor:#3f7f7f //spanspan stylecolor:#3f7f7f/appender/spanspan stylecolor:#3f7f7flogger/span span stylecolor:#7f007fname/spanspan stylecolor:#2a00ffreactor.netty.http.server.AccessLog/span span stylecolor:#7f007flevel/spanspan stylecolor:#2a00ffINFO/span span stylecolor:#7f007fadditivity/spanspan stylecolor:#2a00fffalse/spanspan stylecolor:#3f7f7f/spanspan stylecolor:#3f7f7fappender-ref/span span stylecolor:#7f007fref/spanspan stylecolor:#2a00ffasync/spanspan stylecolor:#3f7f7f//spanspan stylecolor:#3f7f7f/logger/span/span/span/span 121. CORS配置 可以将网关配置为控制CORS行为。“全局” CORS配置是URL模式到Spring Framework CorsConfiguration的映射。 application.yml。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring/span: span stylecolor:#7f007f cloud/span: span stylecolor:#7f007f gateway/span: span stylecolor:#7f007f globalcors/span: span stylecolor:#7f007f corsConfigurations/span: span stylecolor:#7f007f [/**]/span: span stylecolor:#7f007f allowedOrigins/span: span stylecolor:#2a00ffhttps://docs.spring.io/span span stylecolor:#7f007f allowedMethods/span:- GET/span/span/span 在上面的示例中对于所有GET请求的路径来自docs.spring.io的请求都将允许CORS请求。 要为未被某些网关路由谓词处理的请求提供相同的CORS配置请将属性spring.cloud.gateway.globalcors.add-to-simple-url-handler-mapping设置为true。当尝试支持CORS预检请求并且您的路由谓词未评估为true时这很有用因为http方法为options。 122.执行器API /gateway执行器端点允许监视Spring Cloud Gateway应用程序并与之交互。为了可远程访问必须在应用程序属性中通过HTTP或JMX 启用和公开端点。 application.properties。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fmanagement.endpoint.gateway.enabled/spantrue span stylecolor:#3f5f5fem# default value/em/span span stylecolor:#7f007fmanagement.endpoints.web.exposure.include/spangateway/span/span/span 122.1详细执行器格式 一种新的更详细的格式已添加到网关。这为每个路由增加了更多细节从而允许查看与每个路由关联的谓词和过滤器以及任何可用的配置。 /actuator/gateway/routes span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f0055strong[/strong/spanspan stylecolor:#7f0055strong{/strong/spanspan stylecolor:#2a00ffpredicate/span: span stylecolor:#2a00ff(Hosts: [**.addrequestheader.org] Paths: [/headers], match trailing slash: true)/spanspan stylecolor:#7f0055strong,/strong/spanspan stylecolor:#2a00ffroute_id/span: span stylecolor:#2a00ffadd_request_header_test/spanspan stylecolor:#7f0055strong,/strong/spanspan stylecolor:#2a00fffilters/span: span stylecolor:#7f0055strong[/strong/spanspan stylecolor:#2a00ff[[AddResponseHeader X-Response-Default-Foo Default-Bar], order 1]/spanspan stylecolor:#7f0055strong,/strong/spanspan stylecolor:#2a00ff[[AddRequestHeader X-Request-Foo Bar], order 1]/spanspan stylecolor:#7f0055strong,/strong/spanspan stylecolor:#2a00ff[[PrefixPath prefix /httpbin], order 2]/span]span stylecolor:#7f0055strong,/strong/spanspan stylecolor:#2a00ffuri/span: span stylecolor:#2a00fflb://testservice/spanspan stylecolor:#7f0055strong,/strong/spanspan stylecolor:#2a00fforder/span: 0span stylecolor:#7f0055strong}/strong/span span stylecolor:#7f0055strong]/strong/span/span/span/span 要启用此功能请设置以下属性 application.properties。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f007fspring.cloud.gateway.actuator.verbose.enabled/spantrue/span/span/span 在将来的版本中该默认值为true。 122.2检索路由过滤器 122.2.1全局过滤器 要检索应用于所有路由的全局过滤器请向/actuator/gateway/globalfilters发出GET请求。产生的响应类似于以下内容 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8{org.springframework.cloud.gateway.filter.LoadBalancerClientFilter77856cc5: 10100,org.springframework.cloud.gateway.filter.RouteToRequestUrlFilter4f6fd101: 10000,org.springframework.cloud.gateway.filter.NettyWriteResponseFilter32d22650: -1,org.springframework.cloud.gateway.filter.ForwardRoutingFilter106459d9: 2147483647,org.springframework.cloud.gateway.filter.NettyRoutingFilter1fbd5e0: 2147483647,org.springframework.cloud.gateway.filter.ForwardPathFilter33a71d23: 0,org.springframework.cloud.gateway.filter.AdaptCachedBodyGlobalFilter135064ea: 2147483637,org.springframework.cloud.gateway.filter.WebsocketRoutingFilter23c05889: 2147483646 }/span/span/span 该响应包含适当的全局过滤器的详细信息。为每个全局过滤器提供过滤器对象的字符串表示形式例如org.springframework.cloud.gateway.filter.LoadBalancerClientFilter77856cc5和过滤器链中的相应顺序。 122.2.2路由过滤器 要检索应用于路由的GatewayFilter工厂请向/actuator/gateway/routefilters发出GET请求。产生的响应类似于以下内容 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8{[AddRequestHeaderGatewayFilterFactory570ed9c configClass AbstractNameValueGatewayFilterFactory.NameValueConfig]: null,[SecureHeadersGatewayFilterFactoryfceab5d configClass Object]: null,[SaveSessionGatewayFilterFactory4449b273 configClass Object]: null }/span/span/span 该响应包含应用于任何特定路由的GatewayFilter工厂的详细信息。为每个工厂提供相应对象的字符串表示形式例如[SecureHeadersGatewayFilterFactoryfceab5d configClass Object]。请注意null值是由于端点控制器的实现不完整而导致的因为它试图设置对象在过滤器链中的顺序该顺序不适用于GatewayFilter工厂对象。 122.3刷新路由缓存 要清除路由缓存请向/actuator/gateway/refresh发出POST请求。该请求返回200但没有响应主体。 122.4检索网关中定义的路由 要检索网关中定义的路由请向/actuator/gateway/routes发出GET请求。产生的响应类似于以下内容 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8[{route_id: first_route,route_object: {predicate: org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory$$Lambda$432/17368266401e9d7e7d,filters: [OrderedGatewayFilter{delegateorg.springframework.cloud.gateway.filter.factory.PreserveHostHeaderGatewayFilterFactory$$Lambda$436/6744802756631ef72, order0}]},order: 0 }, {route_id: second_route,route_object: {predicate: org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory$$Lambda$432/1736826640cd8d298,filters: []},order: 0 }]/span/span/span 该响应包含网关中定义的所有路由的详细信息。下表描述了响应的每个元素即路线的结构。 路径类型描述 route_id String The route id. route_object.predicate Object The route predicate. route_object.filters Array The GatewayFilter factories applied to the route. order Number The route order. 122.5检索有关特定路线的信息 要检索有关一条路线的信息请向/actuator/gateway/routes/{id}发送一个GET请求例如/actuator/gateway/routes/first_route。产生的响应类似于以下内容 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8{id: first_route,predicates: [{name: Path,args: {_genkey_0:/first}}],filters: [],uri: https://www.uri-destination.org,order: 0 }]/span/span/span 下表描述了响应的结构。 路径类型描述 id String The route id. predicates Array The collection of route predicates. Each item defines the name and the arguments of a given predicate. filters Array The collection of filters applied to the route. uri String The destination URI of the route. order Number The route order. 122.6创建和删除特定路线 要创建路由请使用指定路由字段的JSON正文向/gateway/routes/{id_route_to_create}发出POST请求请参见上一小节。 要删除路由请向/gateway/routes/{id_route_to_delete}发出DELETE请求。 122.7概述所有端点的列表 下表总结了Spring Cloud网关执行器端点。请注意每个端点都有/actuator/gateway作为基本路径。 IDHTTP方法描述 globalfilters GET Displays the list of global filters applied to the routes. routefilters GET Displays the list of GatewayFilter factories applied to a particular route. refresh POST Clears the routes cache. routes GET Displays the list of routes defined in the gateway. routes/{id} GET Displays information about a particular route. routes/{id} POST Add a new route to the gateway. routes/{id} DELETE Remove an existing route from the gateway. 123.故障排除 123.1日志级别 以下是一些有用的记录器它们包含DEBUG和TRACE级别的有价值的故障排除信息。 org.springframework.cloud.gatewayorg.springframework.http.server.reactiveorg.springframework.web.reactiveorg.springframework.boot.autoconfigure.webreactor.nettyredisratelimiter 123.2窃听 Reactor Netty HttpClient和HttpServer可以启用窃听功能。与将reactor.netty日志级别设置为DEBUG或TRACE结合使用时将允许记录信息例如通过网络发送和接收的标头和正文。要启用此功能请分别为HttpServer和HttpClient设置spring.cloud.gateway.httpserver.wiretaptrue和/或spring.cloud.gateway.httpclient.wiretaptrue。 124.开发人员指南 这些是编写网关的某些自定义组件的基本指南。 124.1编写自定义路由谓词工厂 为了编写路由谓词您将需要实现RoutePredicateFactory。您可以扩展名为AbstractRoutePredicateFactory的抽象类。 MyRoutePredicateFactory.java。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongclass/strong/span MyRoutePredicateFactory span stylecolor:#7f0055strongextends/strong/span AbstractRoutePredicateFactoryHeaderRoutePredicateFactory.Config {span stylecolor:#7f0055strongpublic/strong/span MyRoutePredicateFactory() {span stylecolor:#7f0055strongsuper/strong/span(Config.span stylecolor:#7f0055strongclass/strong/span);}emspan stylecolor:grayOverride/span/emspan stylecolor:#7f0055strongpublic/strong/span PredicateServerWebExchange apply(Config config) {span stylecolor:#3f5f5fem// grab configuration from Config object/em/spanspan stylecolor:#7f0055strongreturn/strong/span exchange - {span stylecolor:#3f5f5fem//grab the request/em/spanServerHttpRequest request exchange.getRequest();span stylecolor:#3f5f5fem//take information from the request to see if it/em/spanspan stylecolor:#3f5f5fem//matches configuration./em/spanspan stylecolor:#7f0055strongreturn/strong/span matches(config, request);};}span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongstatic/strong/span span stylecolor:#7f0055strongclass/strong/span Config {span stylecolor:#3f5f5fem//Put the configuration properties for your filter here/em/span}}/span/span/span 124.2编写自定义GatewayFilter工厂 为了编写GatewayFilter您将需要实现GatewayFilterFactory。您可以扩展名为AbstractGatewayFilterFactory的抽象类。 PreGatewayFilterFactory.java。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongclass/strong/span PreGatewayFilterFactory span stylecolor:#7f0055strongextends/strong/span AbstractGatewayFilterFactoryPreGatewayFilterFactory.Config {span stylecolor:#7f0055strongpublic/strong/span PreGatewayFilterFactory() {span stylecolor:#7f0055strongsuper/strong/span(Config.span stylecolor:#7f0055strongclass/strong/span);}emspan stylecolor:grayOverride/span/emspan stylecolor:#7f0055strongpublic/strong/span GatewayFilter apply(Config config) {span stylecolor:#3f5f5fem// grab configuration from Config object/em/spanspan stylecolor:#7f0055strongreturn/strong/span (exchange, chain) - {span stylecolor:#3f5f5fem//If you want to build a pre filter you need to manipulate the/em/spanspan stylecolor:#3f5f5fem//request before calling chain.filter/em/spanServerHttpRequest.Builder builder exchange.getRequest().mutate();span stylecolor:#3f5f5fem//use builder to manipulate the request/em/spanspan stylecolor:#7f0055strongreturn/strong/span chain.filter(exchange.mutate().request(request).build());};}span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongstatic/strong/span span stylecolor:#7f0055strongclass/strong/span Config {span stylecolor:#3f5f5fem//Put the configuration properties for your filter here/em/span}}/span/span/span PostGatewayFilterFactory.java。  span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongclass/strong/span PostGatewayFilterFactory span stylecolor:#7f0055strongextends/strong/span AbstractGatewayFilterFactoryPostGatewayFilterFactory.Config {span stylecolor:#7f0055strongpublic/strong/span PostGatewayFilterFactory() {span stylecolor:#7f0055strongsuper/strong/span(Config.span stylecolor:#7f0055strongclass/strong/span);}emspan stylecolor:grayOverride/span/emspan stylecolor:#7f0055strongpublic/strong/span GatewayFilter apply(Config config) {span stylecolor:#3f5f5fem// grab configuration from Config object/em/spanspan stylecolor:#7f0055strongreturn/strong/span (exchange, chain) - {span stylecolor:#7f0055strongreturn/strong/span chain.filter(exchange).then(Mono.fromRunnable(() - {ServerHttpResponse response exchange.getResponse();span stylecolor:#3f5f5fem//Manipulate the response in some way/em/span}));};}span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongstatic/strong/span span stylecolor:#7f0055strongclass/strong/span Config {span stylecolor:#3f5f5fem//Put the configuration properties for your filter here/em/span}}/span/span/span 124.3编写自定义全局过滤器 为了编写自定义全局过滤器您将需要实现GlobalFilter接口。这会将过滤器应用于所有请求。 如何分别设置全局前置和后置过滤器的示例 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8emspan stylecolor:grayBean/span/em span stylecolor:#7f0055strongpublic/strong/span GlobalFilter customGlobalFilter() {span stylecolor:#7f0055strongreturn/strong/span (exchange, chain) - exchange.getPrincipal().map(Principal::getName).defaultIfEmpty(span stylecolor:#2a00ffDefault User/span).map(userName - {span stylecolor:#3f5f5fem//adds header to proxied request/em/spanexchange.getRequest().mutate().header(span stylecolor:#2a00ffCUSTOM-REQUEST-HEADER/span, userName).build();span stylecolor:#7f0055strongreturn/strong/span exchange;}).flatMap(chain::filter); }emspan stylecolor:grayBean/span/em span stylecolor:#7f0055strongpublic/strong/span GlobalFilter customGlobalPostFilter() {span stylecolor:#7f0055strongreturn/strong/span (exchange, chain) - chain.filter(exchange).then(Mono.just(exchange)).map(serverWebExchange - {span stylecolor:#3f5f5fem//adds header to response/em/spanserverWebExchange.getResponse().getHeaders().set(span stylecolor:#2a00ffCUSTOM-RESPONSE-HEADER/span,HttpStatus.OK.equals(serverWebExchange.getResponse().getStatusCode()) ? span stylecolor:#2a00ffIt worked/span: span stylecolor:#2a00ffIt did not work/span);span stylecolor:#7f0055strongreturn/strong/span serverWebExchange;}).then(); }/span/span/span 125.使用Spring MVC或Webflux构建一个简单的网关 以下描述了替代样式的网关。先前文档的None适用于以下内容。 Spring Cloud Gateway提供了一个名为ProxyExchange的实用程序对象您可以在常规的Spring web处理程序中将其用作方法参数。它通过镜像HTTP动词的方法支持基本的下游HTTP交换。使用MVC它还支持通过forward()方法转发到本地处理程序。要使用ProxyExchange只需在类路径中包含正确的模块spring-cloud-gateway-mvc或spring-cloud-gateway-webflux。 MVC示例代理对远程服务器下游“ /测试”的请求 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8emspan stylecolor:grayRestController/span/em emspan stylecolor:graySpringBootApplication/span/em span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongclass/strong/span GatewaySampleApplication {emspan stylecolor:grayValue(${remote.home})/span/emspan stylecolor:#7f0055strongprivate/strong/span URI home;emspan stylecolor:grayGetMapping(/test)/span/emspan stylecolor:#7f0055strongpublic/strong/span ResponseEntity? proxy(ProxyExchangespan stylecolor:#7f0055strongbyte/strong/span[] proxy) span stylecolor:#7f0055strongthrows/strong/span Exception {span stylecolor:#7f0055strongreturn/strong/span proxy.uri(home.toString() span stylecolor:#2a00ff/image/png/span).get();}}/span/span/span 与Webflux相同 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8emspan stylecolor:grayRestController/span/em emspan stylecolor:graySpringBootApplication/span/em span stylecolor:#7f0055strongpublic/strong/span span stylecolor:#7f0055strongclass/strong/span GatewaySampleApplication {emspan stylecolor:grayValue(${remote.home})/span/emspan stylecolor:#7f0055strongprivate/strong/span URI home;emspan stylecolor:grayGetMapping(/test)/span/emspan stylecolor:#7f0055strongpublic/strong/span MonoResponseEntity? proxy(ProxyExchangespan stylecolor:#7f0055strongbyte/strong/span[] proxy) span stylecolor:#7f0055strongthrows/strong/span Exception {span stylecolor:#7f0055strongreturn/strong/span proxy.uri(home.toString() span stylecolor:#2a00ff/image/png/span).get();}}/span/span/span ProxyExchange上有一些便利的方法可以使处理程序方法发现并增强传入请求的URI路径。例如您可能希望提取路径的尾随元素以将它们传递到下游 span stylecolor:#333333span stylecolor:#000000span stylebackground-color:#f8f8f8emspan stylecolor:grayGetMapping(/proxy/path/**)/span/em span stylecolor:#7f0055strongpublic/strong/span ResponseEntity? proxyPath(ProxyExchangespan stylecolor:#7f0055strongbyte/strong/span[] proxy) span stylecolor:#7f0055strongthrows/strong/span Exception {String path proxy.path(span stylecolor:#2a00ff/proxy/path//span);span stylecolor:#7f0055strongreturn/strong/span proxy.uri(home.toString() span stylecolor:#2a00ff/foos//span path).get(); }/span/span/span 网关处理程序方法可以使用Spring MVC或Webflux的所有功能。因此例如您可以注入请求标头和查询参数并且可以使用映射批注中的声明来约束传入的请求。有关这些功能的更多详细信息请参见Spring MVC中的RequestMapping文档。 可以使用ProxyExchange上的header()方法将标头添加到下游响应中。 您还可以通过将映射器添加到get()等方法来操纵响应头以及响应中您喜欢的任何其他内容。映射器是Function它接收传入的ResponseEntity并将其转换为传出的ResponseEntity。 为不传递到下游的“敏感”标头默认情况下为“ cookie”和“授权”以及“代理”标头x-forwarded-*提供了一流的支持
http://www.hkea.cn/news/14339578/

相关文章:

  • 电商网站建设 问题 心得体会阿里巴巴做网站的电话号码
  • 网站开发用的框架前端海报设计 网站
  • 网站页面设计公司推荐黑龙江建设网ca锁费用
  • 电子商务网站推广的目的买机票便宜网站建设
  • 郑州做网站推广的公司哪家好福建省建筑施工企业信用评价系统
  • 网站开发与设计结课大作业官方网站建设状况
  • 企业官网设计图广州优化排名推广
  • 中国建筑八个局排名乐陵seo网站优化
  • 网站建设实训考试百度如何创建网站
  • 网站系统与网站源码的关系合肥新站区有做网站的吗
  • 企业网站建设规范建设众筹类网站
  • 中移建设 公司 网站东台市建设局网站
  • 自己创建网站的注意事项代运营服务方案
  • 上海cms网站建设网站添加支付功能
  • 广州建站推广ic外贸平台排行
  • 淘宝推广费用一般多少小璇seo优化网站
  • 无锡市建设银行总行网站怎么做农产品垂直网站
  • 网站背景色软件开发网络技术开发公司
  • 视频直播app开发网站外贸站外推广
  • 梅州生态建设有限公司网站定南建设银行网站点
  • 网站建设网站维护网站外包为什么做游戏网站被封
  • 美橙智能网站行业网站建设教程
  • 网站制作品牌公司做网站须知
  • 做响应式网站的微博号如何做网站首页的psd图
  • 佛山专业建设网站郴州做网站的
  • 河北农业建设信息网站wordpress判断使用模版
  • php可以做网站布局吗昆山规划与建设局网站
  • 做公司的网站有哪些东西吗阿克苏交通建设局网站
  • 温州外贸网站建设资阳公司短视频优化服务
  • 江淮网站开发中信建设有限责任公司重庆沿江高速公路总承包部