Spring Cloud Gateway网关的高级特性之GatewayFilter Factories(路由过滤器)

1、GatewayFilter Factories(路由过滤器)

官方访问地址:点击这里

来自官方的解释如下图所示:
在这里插入图片描述

简单来说就是:

  • 客户端向 Spring Cloud Gateway 发送请求。
  • 如果请求与某个路由匹配,则该请求会被传递给 Gateway Web Handler。
  • Gateway Web Handler 将请求通过一系列过滤器,这些过滤器可以做一些预处理工作(比如添加头部信息、修改请求参数等)。
  • 过滤器处理完成后,实际的代理请求才会被发送到目标服务。
  • 当响应从目标服务返回时,它还会经过相同的过滤器链,这时过滤器可以做一些后处理工作(例如修改响应内容、添加响应头等)。
  • 最终处理完毕后,响应被返回给客户端。

路由过滤器的主要作用就是用来做请求鉴权、异常处理等,比较典型的就有记录接口调用时长统计。

2、 Filter过滤的类型

  1. 全局默认过滤器Global Filters:官网;gateway出厂默认已有的,直接用即可,主要作用于所有的路由不需要在配置文件中配置,作用在所有的路由上,实现GlobalFilter接口即可;
  2. 单一内置过滤器GatewayFilter: 官网;也可以称为网关过滤器,这种过滤器主要是作用于单一路由或者某个路由分组;
  3. 定义过滤器

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

-今非昔比°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值