spring cloud gateway 使用 path 断言匹配请求路径,基于 pathpatternparser 或 antpathmatcher,支持 /api/users/** 等模式,区分大小写,可组合 method、header、query 等断言,并支持自定义断言。

Java 网关 Spring Cloud Gateway 通过 Predicate(断言) 判断请求是否符合某条路由规则,其中最常用的是路径匹配。它不直接写正则或通配符,而是基于 Spring 的 PathPatternParser(5.3+ 默认)或 AntPathMatcher(旧版),支持简洁、安全、高性能的路径模式匹配。
常用路径断言:Path
这是最直观的方式,使用 Path 断言匹配请求 URI 的路径部分(不包含查询参数和域名)。
- 写法示例(YAML):
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/api/users/**, /api/profile
说明:
• /api/users/** 匹配 /api/users、/api/users/123、/api/users/abc/info 等;
• /api/profile 精确匹配该路径;
• 多个模式用英文逗号分隔,满足任一即匹配成功。
匹配逻辑与注意事项
Gateway 的路径匹配只作用于 request.getRequestURI().getPath(),自动忽略查询参数、锚点、端口等。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 请求
GET /api/users/1?name=jack→ 匹配/api/users/**✅ - 请求
GET /API/users/1→ 不匹配(默认区分大小写)❌ - 请求
GET /api/users/→ 匹配/api/users/**✅(**可匹配空段) - 路径末尾斜杠是否必须?取决于你写的模式 ——
/api/users不匹配/api/users/,但/api/users/**可以。
组合其他断言增强匹配能力
单靠 Path 有时不够灵活,可搭配其他 Predicate 实现更精准控制:
-
Method:限定 HTTP 方法
- Method=GET,POST -
Header:检查请求头
- Header=X-Auth-Token, \w{8}-\w{4}-\w{4}-\w{4}-\w{12}(支持正则) -
Query:匹配查询参数
- Query=token(存在 token 参数)- Query=role, admin(role=value 为 admin) -
Composite(组合):用
And/Or/Not拼装多个断言(Java DSL 中更常见)
自定义断言(进阶)
若内置断言无法满足业务(例如按请求体 JSON 字段路由、灰度标记识别),可实现 AbstractRoutePredicateFactory 自定义断言:
- 继承泛型类,如
AbstractRoutePredicateFactory<myconfig></myconfig> - 重写
apply(Config config)返回Predicate<serverwebexchange></serverwebexchange> - 在
config中解析配置项(如 YAML 里写的myKey: value) - 注册为 Spring Bean 即可被网关识别并使用
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










