SpringCloud Gateway内置30过滤器,如何减少80%重复代码?
摘要:大家好,我是小富~ 我发现公司的网关项目里有很多的轮子,几乎每个人接手这个项目开发,都会自定义过滤器,导致有非常非常多的过滤器,修改其中一个,指不定就会影响其他的人功能,非常的恼火。 其实在 Spring Cloud Gateway 本身内
大家好,我是小富~
我发现公司的网关项目里有很多的轮子,几乎每个人接手这个项目开发,都会自定义过滤器,导致有非常非常多的过滤器,修改其中一个,指不定就会影响其他的人功能,非常的恼火。
其实在 Spring Cloud Gateway 本身内置了很多通用的过滤器组件,有些功能无需重复开发,直接通过配置就能完成请求修改、参数处理、安全校验等功能。但遗憾的是,很多同学只知道 RewritePath 等常用过滤器,却忽略了官方早已内置的 30+ 过滤器。
下边小富梳理 Spring Cloud Gateway 30+ 个过滤器,包含配置示例与实战场景,你会发现有些代码真的不用写。
一、请求相关
1. AddRequestHeader
作用:给请求添加 Header,转发请求前,给请求添加指定 Header。
配置示例:
spring:
cloud:
gateway:
routes:
- id: xiaofu-120412
uri: http://127.0.0.1:12041/
predicates:
- Weight=xiaofu-group, 1
- Path=/test/version1/**
filters:
- RewritePath=/test/version1/(?<segment>.*),/$\{segment}
- name: AddRequestHeader
args:
name: X-Request-Source # Header名称
value: gateway # Header值
场景:传递请求来源标识(如gateway、app),方便下游服务做权限控制。
2. RemoveRequestHeader
作用:移除请求中的 Header,转发前移除请求中指定的 Header(如敏感信息)。
配置示例:
filters:
- RewritePath=/test/version1/(?<segment>.*),/$\{segment}
- name: RemoveRequestHeader
args:
name: Authorization # 移除客户端传来的 Authorization 头
场景:下游服务不需要客户端直接传递的令牌,由网关统一处理认证时使用。
3. SetRequestHeader
作用:覆盖请求中的 Header,若请求中已存在指定 Header,直接覆盖其值;不存在则添加。
配置示例:
filters:
- RewritePath=/test/version1/(?<segment>.*),/$\{segment}
- name: SetRequestHeader
args:
name: Authorization
value: 111111 # 强制将 Authorization 设为 111111
注意:与 AddRequestHeader 的区别是,SetRequestHeader 会覆盖原有值,而 AddRequestHeader 会保留原有值(若存在)。
4. AddRequestParameter
作用:转发请求时给请求添加参数,URL 或请求体添加参数(支持 GET/POST)。
配置示例:
filters:
- RewritePath=/test/version1/(?<segment>.*),/$\{segment}
- name: AddRequestParameter
args:
name: from
value: gateway # 所有请求会带上 ?from=gateway 参数
场景:统计请求来源,或给下游服务传递额外标识(如灰度标记)。
5. RemoveRequestParameter
作用:移除请求中的参数,转发前移除请求中的指定参数(如敏感参数 password)。
