前面 SpringCloud Gateway中Route Predicate Factories详细说明 我们研究了GateWay中各种路由断言的使用。另外,SpringCloud GateWay 还提供了各种过滤器用来对请求和响应进行处理。
官网地址:SpringCloud Gateway Filter
官网地址:global-filters
总结有三种过滤器:
- 全局默认过滤器Global Filters
gateway出厂默认已有的,直接用即可,主要作用于所有的路由。不需要在配置文件中配置,作用在所有的路由上,实现GlobalFilter接口即可。 - 单一内置过滤器GatewayFilter
也可以称为网关过滤器,这种过滤器主要是作用于单一路由或者某个路由分组 - 自定义过滤器
【1】GatewayFilter Factories
路由过滤器允许对请求和响应进行修改。路由过滤器只作用于特定路由,如果想某些规则应用于所有路由,那么需要使用 spring.cloud.gateway.default-filters.
。
Spring Cloud Gateway包含了许多内置GatewayFilter Factories。
如图所示这里有31个过滤器,这里只捡几个说明,感兴趣的可以查看[官方文档]。
① AddRequestHeader GatewayFilter Factory
为指定路由添加请求头,需要两个参数:请求头名称和值。值格式同样支持URI variables 。
如下是判断请求头X-Request-color是否存在且值等于blue
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: https://example.org
filters:
- AddRequestHeader=X-Request-color, blue
② AddRequestParameter GatewayFilter Factory
为指定路由匹配的所有请求添加请求参数。需要两个参数:请求参数名称和值。值格式同样支持URI variables 。
如下是判断请求参数color是否存在且值等于blue
spring:
cloud:
gateway:
routes:
- id: add_request_parameter_route
uri: https://example.org
filters:
- AddRequestParameter=color, blue
③ AddResponseHeader GatewayFilter Factory
为指定路由匹配的所有请求添加响应头。需要两个参数:响应头名称和值。值格式同样支持URI variables 。
如下为响应添加响应头X-Response-Color且值等于Blue
spring:
cloud:
gateway:
routes:
- id: add_response_header_route
uri: https://example.org
filters:
- AddResponseHeader=X-Response-Color, Blue
④ DedupeResponseHeader GatewayFilter Factory
Dedupe是重复数据消除的意思,也就是消除指定的请求头重复数据。
spring:
cloud:
gateway:
routes:
- id: dedupe_response_header_route
uri: https://example.org
filters:
- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin
上面将会消除Access-Control-Allow-Credentials和Access-Control-Allow-Origin的重复值。
⑨ PrefixPath GatewayFilter Factory
添加统一的请求前缀。
spring:
cloud:
gateway:
routes:
- id: prefixpath_route
uri: https://example.org
filters:
- PrefixPath=/mypath
将会为匹配的所有请求添加前缀 /mypath
,假设请求为/hello
将会变为 /mypath/hello
。
(16)RedirectTo GatewayFilter Factory
重定向请求,如下所示将会重定向到https://acme.org。
spring:
cloud:
gateway:
routes:
- id: prefixpath_route
uri: https://example.org
filters:
- RedirectTo=302, https://acme.org
重定向并携带请求参数:第三个参数设置为true表示携带请求参数,默认是false。
spring:
cloud:
gateway