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)。
阅读全文