当前位置: 首页 > news >正文

Spring Cloud Gateway中常见的过滤器

Spring Cloud Gateway 的过滤器 (Filters) 是处理请求和响应的核心组件,它们允许我们在请求被路由到目标服务之前 (pre-filter) 和从目标服务返回响应之后 (post-filter) 对其进行修改或增强。

过滤器类型

Spring Cloud Gateway 中的过滤器主要分为两大类:

  1. GatewayFilter (网关过滤器):
    • 作用范围: 绑定到特定的路由。只有当请求匹配到该路由时,这些过滤器才会被执行。
    • 配置方式: 通常在路由定义中配置。
    • 使用场景: 对特定服务的请求进行定制化处理,例如为某个微服务添加特定的请求头、修改路径等。
  2. GlobalFilter (全局过滤器):
    • 作用范围: 作用于所有路由。无论请求匹配到哪个路由,或者没有匹配到任何路由,全局过滤器都会被执行。
    • 配置方式: 作为 Spring Bean 注册到应用上下文中。
    • 使用场景: 通用的横切关注点,例如日志记录、认证、限流、跨域处理等。

常见的

filters:
# 请求修改相关# AddRequestHeader 过滤器:添加请求头。- AddRequestHeader=X-Request-Id, my-trace-id# AddRequestParameter 过滤器:添加请求参数。- AddRequestParameter=source, gateway# RemoveRequestHeader 过滤器:移除请求头。- RemoveRequestHeader=Cookie# RemoveRequestParameter 过滤器:移除请求参数。- RemoveRequestParameter=debug# SetRequestHeader 过滤器:设置或覆盖请求头。- SetRequestHeader=Host, example.com# PrefixPath 过滤器:为请求路径添加前缀。- PrefixPath=/v1# RewritePath 过滤器:重写请求路径,支持正则表达式。- RewritePath=/foo/(?<segment>.*), /${segment}# StripPrefix 过滤器:移除请求路径的指定前缀层数。- StripPrefix=1# 响应修改相关# AddResponseHeader 过滤器:添加响应头。- AddResponseHeader=X-Processed-By, Gateway# RemoveResponseHeader 过滤器:移除响应头。- RemoveResponseHeader=Server# SetResponseHeader 过滤器:设置或覆盖响应头。- SetResponseHeader=Cache-Control, no-cache# SetStatus 过滤器:设置响应的 HTTP 状态码。- SetStatus=401# 流量控制与弹性相关# RequestRateLimiter 过滤器:请求限流。# 注意:此过滤器通常需要配合具体的限流算法(如 RedisRateLimiter)使用。- RequestRateLimiter# CircuitBreaker 过滤器:断路器。用于故障隔离和熔断。- CircuitBreaker=myServiceCircuitBreaker# Retry 过滤器:重试机制。当后端服务调用失败时,进行重试。- Retry=3# 重定向与转发相关# RedirectTo 过滤器:重定向到新的 URL。- RedirectTo=302, https://new.example.com# Forward 过滤器:转发到本地 Spring WebFlux Handler。- Forward=/error

当一个请求匹配到某个路由后,Spring Cloud Gateway 就会构建该路由的过滤器链,过滤器的执行顺序则由它们的 order 值决定:

  • order越小的过滤器,在“pre”阶段越执行,在“post”阶段越执行。
http://www.lryc.cn/news/586246.html

相关文章:

  • 【时间之外】尘封的智能套件复活记
  • 【QGC】深入解析 QGC 配置管理
  • Gas and Gas Price
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十课——图像gamma矫正的FPGA实现
  • Git企业级开发(最终篇)
  • 闲庭信步使用图像验证平台加速FPGA的开发:第十一课——图像均值滤波的FPGA实现
  • TCP的socket编程
  • OneCode 3.0架构深度剖析:工程化模块管理与自治UI系统的设计与实现
  • 多路选择器的学习
  • 前端面试专栏-算法篇:24. 算法时间与空间复杂度分析
  • TCP与UDP协议详解:网络世界的可靠信使与高速快递
  • 苍穹外卖-day06
  • docker—— harbor私有仓库部署管理
  • Linux进程管理的核心:task_struct中的双链表与网状数据结构
  • Linux驱动08 --- 数据库
  • C++ Map 和 Set 详解:从原理到实战应用
  • 【Spring AOP】什么是AOP?切点、连接点、通知和切面
  • Python 实战:构建 Git 自动化助手
  • RabbitMQ面试精讲 Day 1:RabbitMQ核心概念与架构设计
  • 网络安全初级第一次作业
  • 医疗AI前端开发中的常见问题分析和解决方法
  • Filament引擎(三) ——引擎渲染流程
  • 【GESP】C++ 2025年6月一级考试-客观题真题解析
  • Apache Iceberg数据湖高级特性及性能调优
  • PyTorch神经网络实战:从零构建图像分类模型
  • 【文献阅读】DEPTH PRO: SHARP MONOCULAR METRIC DEPTH IN LESS THAN A SECOND
  • Rust Web 全栈开发(五):使用 sqlx 连接 MySQL 数据库
  • Spring 框架中的设计模式:从实现到思想的深度解析
  • 单链表的题目,咕咕咕
  • Rust Web 全栈开发(六):在 Web 项目中使用 MySQL 数据库