Spring Cloud Gateway多路由场景下如何仅配置一次StripPrefix前缀剥离规则
全局复用StripPrefix过滤器的实现方案
Spring Cloud Gateway 原生支持 全局默认过滤器 配置能力,和Zuul的全局过滤器规则逻辑对齐,完全可以实现一次配置、所有路由自动套用StripPrefix规则,彻底解决20条路由重复写相同配置的冗余问题。
配置逻辑说明
全局默认过滤器的配置层级与routes、服务发现路由节点平级,所有被路由规则匹配命中的请求,都会按顺序经过这里定义的过滤器处理,执行效果和单条路由下单独定义的过滤器没有任何区别。
改造后完整配置
将原来每条路由下单独配置的StripPrefix=1全部删除,把规则挪到全局default-filters节点下即可:
spring: cloud: gateway: # 全局公共过滤器,对所有路由自动生效 default-filters: - StripPrefix=1 discovery: locator: lower-case-service-id: true enabled: true routes: - id: auth-service uri: lb://server-auth predicates: - Path=/prefixHere/auth/** - id: operation-service uri: lb://operation-service predicates: - Path=/prefixHere/operation/**
常见注意点
- 全局配置和路由自定义配置的优先级:如果后续某条业务路由需要调整前缀剥离的层级数,只需要在该路由的
filters节点下重新定义对应StripPrefix规则即可,路由级别的自定义配置会自动覆盖全局默认规则,不会出现配置冲突 - 配置层级避坑:
default-filters必须挂在spring.cloud.gateway配置路径下,不能嵌套在某条路由、或者服务发现配置节点内部,否则规则不会生效 - 自动服务发现路由的适配:当前开启的
discovery.locator.enabled=true功能生成的自动路由,也会自动套用这个全局StripPrefix规则,如果这部分自动生成的路由不需要剥除路径前缀,可以单独为这部分路由定义专属的过滤规则
改造完成后,所有请求的路径处理逻辑和之前逐条配置StripPrefix的效果完全一致,不需要调整防火墙规则、后端服务的接口路径,不会产生业务兼容问题。
内容的提问来源于stack exchange,提问作者Viktor Procházka
相关产品推荐
相关产品推荐

