GateWay之Filter相关
# GateWay之Filter相关
# 过滤器概念与相关资料
# 概念
SpringMVC里面的的拦截器Interceptor,Servlet的过滤器
“pre”和 “post” 分别会在请求被执行前调用和被执行后调用,用来修改请求和响应信息
# 作用
Spring Cloud Gateway 中的过滤器(Filter)是其核心功能之一,用于在请求转发前后对请求和响应进行处理。过滤器可以用来实现各种功能,如请求头和响应头的修改、请求日志记录、限流、熔断、重试等。
# 资料
Spring Cloud Gateway-filter (opens new window)
- https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
GateWay-单一过滤器使用讲解-官网 (opens new window)
- https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
# 快速上手
GateWay提供了三种不同类型的过滤器:
全局过滤器:gateway出厂默认已有的,直接用即可,主要作用于所有的路由
不需要在配置文件中配置,作用在所有的路由上,实现GlobalFilter接口即可
单一过滤器:也可以称为网关过滤器,这种过滤器主要是作用于单一路由或者某个路由分组
自定义过滤器:就是单一过滤器提供的功能无法满足你,开发者自行实现的过滤器
下面主要介绍的就是单一过滤器。但因为单一过滤器有很多,因此主要介绍其中几个,其余的还请各位开发者朋友们,到官网自行查阅文档。
- https://docs.spring.io/spring-cloud-gateway/docs/current/reference/html/#gatewayfilter-factories
# AddRequestHeader
对应配置如下:
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: https://example.org
filters:
- AddRequestHeader=X-Request-red, blue
2
3
4
5
6
7
8
9
这样一来,对应请求一来,请求头中就会带上X-Request-red, 且值为blue。
This listing adds
X-Request-red:blue
header to the downstream request’s headers for all matching requests.
AddRequestHeader
is aware of the URI variables used to match a path or host. URI variables may be used in the value and are expanded at runtime.
# RemoveRequestHeader
作用:删除请求头中的信息
- id: pay_routh3 #pay_routh3
uri: lb://cloud-payment-service #匹配后提供服务的路由地址
predicates:
- Path=/pay/gateway/filter/** # 断言,路径相匹配的进行路由
filters:
- AddRequestHeader=X-Request-atguigu1,atguiguValue1 # 请求头kv,若一头含有多参则重写一行设置
- RemoveRequestHeader=sec-fetch-site # 删除请求头sec-fetch-sit
2
3
4
5
6
7
# SetRequestHeader
当然,还有修改请求头,SetRequestHeader
filters:
- AddRequestHeader=X-Request-atguigu1,atguiguValue1 # 请求头kv,若一头含有多参则重写一行设置
- AddRequestHeader=X-Request-atguigu2,atguiguValue2
- RemoveRequestHeader=sec-fetch-site # 删除请求头sec-fetch-site
- SetRequestHeader=sec-fetch-mode, Blue-updatebyzzyy # 将请求头sec-fetch-mode对应的值修改为Blue-updatebyzzyy
2
3
4
5
# Other
除了有Request的,还有相应的,比如:ResponseHeader
filters:
- AddRequestParameter=customerId,9527001 # 新增请求参数Parameter:k ,v
- RemoveRequestParameter=customerName # 删除url请求参数customerName,你传递过来也是null
- AddResponseHeader=X-Response-atguigu, BlueResponse # 新增请求参数X-Response-atguigu并设值为BlueResponse
2
3
4
5
上述是添加影响的。
还有设置响应的:
- AddResponseHeader=X-Response-atguigu, BlueResponse # 新增请求参数X-Response-atguigu并设值为BlueResponse
- SetResponseHeader=Date,2099-11-11 # 设置回应头Date值为2099-11-11
2
RemoveResponseHeader GatewayFilter Factory
- RemoveResponseHeader=Content-Type # 将默认自带Content-Type回应属性删除
还有增加前缀的,PrefixPath GatewayFilter Factory
predicates:
#- Path=/pay/gateway/filter/** # 被分拆为: PrefixPath + Path
- Path=/gateway/filter/** # 断言,为配合PrefixPath测试过滤,暂时注释掉/pay
filters:
- AddRequestHeader=X-Request-atguigu1,atguiguValue1 #请求头kv,若一头含有多参则重写一行设置
- PrefixPath=/pay # http://localhost:9527/pay/gateway/filter
2
3
4
5
6
7
8
这样后,它映射的地址就是 path+prefixPath
也就是:/pay/gateway/filter/**
....还有很多,请到官网查看