1、GatewayFilter Factories(路由过滤器)
官方访问地址:点击这里
来自官方的解释如下图所示:

简单来说就是:
- 客户端向 Spring Cloud Gateway 发送请求。
- 如果请求与某个路由匹配,则该请求会被传递给 Gateway Web Handler。
- Gateway Web Handler 将请求通过一系列过滤器,这些过滤器可以做一些预处理工作(比如添加头部信息、修改请求参数等)。
- 过滤器处理完成后,实际的代理请求才会被发送到目标服务。
- 当响应从目标服务返回时,它还会经过相同的过滤器链,这时过滤器可以做一些后处理工作(例如修改响应内容、添加响应头等)。
- 最终处理完毕后,响应被返回给客户端。
路由过滤器的主要作用就是用来做请求鉴权、异常处理等,比较典型的就有记录接口调用时长统计。
2、 Filter过滤的类型
- 全局默认过滤器Global Filters:官网;gateway出厂默认已有的,直接用即可,主要作用于所有的路由不需要在配置文件中配置,作用在所有的路由上,实现GlobalFilter接口即可;
- 单一内置过滤器GatewayFilter: 官网;也可以称为网关过滤器,这种过滤器主要是作用于单一路由或者某个路由分组;
- 定义过滤器
3、 Gateway内置的过滤器
这里只演示常用的内置过滤器,其他的原理都是一样的。
3.1 The AddRequestHeader GatewayFilter Factory(指定请求头内容ByName)
我们在网关controller中编写测试接口:
Example 14. GateWayController.java
@RestController
public class GateWayController{
@GetMapping(value = "/pay/gateway/filter")
public ResultData<String> getGatewayFilter(HttpServletRequest request){
String result = "";
Enumeration<String> headers = request.getHeaderNames();
while(headers.hasMoreElements()) {
String headName = headers.nextElement();
String headValue = request.getHeader(headName);
System.out.println("请求头名: " + headName +"\t\t\t"+"请求头值: " + headValue);
if(headName.equalsIgnoreCase("X-Request-red")
|| headName.equalsIgnoreCase("X-Request-my")) {
result = result+headName + "\t " + headValue +" ";
}
}
return ResultData.success("getGatewayFilter 过滤器 test: "+result+" \t "+ DateUtil.now());
}
}
Example 14. application.yml
spring:
cloud:
gateway:
routes:
- id: add_request_header_route
uri: https://example.org
filters:
- AddReq

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



