随笔 - 1357  文章 - 0  评论 - 1104  阅读 - 1941万

gateway-路由过滤器 GatewayFilter

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理:

 

Spring提供了31种不同的路由过滤器工厂。例如:

名称                说明
AddRequestHeader    给当前请求添加一个请求头
RemoveRequestHeader    移除请求中的一个请求头
AddResponseHeader    给响应结果中添加一个响应头
RemoveResponseHeader    从响应结果中移除有一个响应头
RequestRateLimiter    限制请求的流量

 

实例:给所有进入userservice的请求添加一个请求头
给所有进入userservice的请求添加一个请求头:Truth=itcast is freaking awesome!

1.局部过滤器
实现方式:在gateway中修改application.yml文件,给userservice的路由添加过滤器:

复制代码
spring:
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: ## 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
          filter: 
            - AddRequestHeader=Truth,zhangsan is freaking awesome! #添加请求头
复制代码

 

2.默认过滤器
如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下:

复制代码
spring:
    gateway:
      routes:
        - id: user-service # 路由标示,必须唯一
          uri: lb://userservice # 路由的目标地址
          predicates: ## 路由断言,也就是判断请求是否符合路由规则的条件
            - Path=/user/** # 路径断言,判断路径是否是以/user开头,如果是则符合
          #filter: 
          #  - AddRequestHeader=Truth,zhangsan is freaking awesome! #添加请求头
        - id: order-service
          uri: lb://orderservice
          predicates:
            - Path=/order/**
            - Before=2037-01-20T17:42:47.789-07:00[Asia/Shanghai]
            #- After=2037-01-20T17:42:47.789-07:00[Asia/Shanghai]
      default-filters:
        - AddRequestHeader=Truth,lisi is freaking awesome! #添加请求头
复制代码

 

复制代码
@RestController
@RequestMapping("order")
public class OrderController {

   @Autowired
   private OrderService orderService;

    @GetMapping("{orderId}")
    public Order queryOrderByUserId(@PathVariable("orderId") Long orderId,
            @RequestHeader(value = "Truth", required = false) String truth) {
        System.out.println("truth: " + truth);
        // 根据id查询订单并返回
        return orderService.queryOrderById(orderId);
    }
}
复制代码

 

 

 

总结:
过滤器的作用是什么?
a.对路由的请求或响应做加工处理,比如添加请求头
b.配置在路由下的过滤器只对当前路由的请求生效


defaultFilters的作用是什么?
a.对所有路由都生效的过滤器

posted on   Ruthless  阅读(3370)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
历史上的今天:
2018-10-04 spring cloud feign的各种配置的使用
2013-10-04 林计钦语录
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示