Spring Cloud Gateway如何为同一URI的不同路径配置不同过滤器
故障原因
Spring Cloud Gateway 路由按配置书写顺序自上而下匹配,请求命中第一条符合条件的路由后就会直接执行对应逻辑,不再向后匹配剩余路由。
你将匹配范围更大的/api/**路由写在前面,所有/api/somepath/**的请求会优先命中第一条仅配置了Filter1的路由,后续配置Filter2的路由根本不会被触发。
实现方案
你可以从以下两种方案中选择适配:
方案一:调整路由顺序,细分路由规则
将匹配范围更窄的子路径路由放在配置最靠前的位置,匹配范围大的通用路由后置,注意子路径路由需要同时配置Filter1,避免该路径请求漏过全局规则:
spring: cloud: gateway: routes: # 子路径路由优先匹配,同时应用两个过滤器 - id: Some route2 uri: http://localhost filters: - name: Filter1 - name: Filter2 predicates: - Path=/api/somepath/** # 通用API路径后置匹配,仅应用全局Filter1 - id: Some route1 uri: http://localhost filters: - name: Filter1 predicates: - Path=/api/**
方案二:单路由内给Filter2配置路径生效范围
如果不想重复配置Filter1,可以保留原有单路由结构,直接给Filter2传路径参数,限定它仅在指定路径下生效,无需拆分多路由:
spring: cloud: gateway: routes: - id: Some route uri: http://localhost predicates: - Path=/api/** filters: - name: Filter1 - name: Filter2 args: path: /api/somepath/**
提示:如果Filter2是自定义过滤器,请保证过滤器内部读取的路径参数名和配置中填写的
path键名一致;如果是Gateway内置过滤器,替换为对应过滤器官方要求的路径参数键即可。
内容的提问来源于stack exchange,提问作者Spacejockey
相关产品推荐
相关产品推荐

