欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > Spring Cloud Gateway 路由断言匹配规则详解

Spring Cloud Gateway 路由断言匹配规则详解

2025/9/17 6:42:45 来源:https://blog.csdn.net/weixin_42118323/article/details/141333412  浏览:    关键词:Spring Cloud Gateway 路由断言匹配规则详解

前言:

Gateway 的路由断言工厂(Route Predicate Factories)是用于路由规则匹配的组件,通过这些断言工厂,Gateway 能够根据请求的属性,例如:路径、方法、头部信息等,来完成不同的请求转发,本篇分享几种常见的断言工厂及配置方法。

Path 路由工厂

根据请求路径进行匹配

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**

Method 路由工厂

根据请求方法类型来匹配路由,不符合的类型不予通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
spring.cloud.gateway.routes[0].predicates[1] = Method=POST

Header 路由工厂

根据请求 Header 中的值匹配路由,请求 Header 中不包含指定的的值不予通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#header 中必须有 name 为 test-header 的请求才可以通过 
spring.cloud.gateway.routes[0].predicates[1] = Header=test-header

Host 路由工厂

根据请求 Host 中的值匹配路由,请求中不包含指定的的值不予通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#匹配 .study.com 结尾的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = Host=**.study.com

Query 路由工厂

根据查询参数匹配路由,只有带有 orderId 参数的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#请求中有 orderId 才可以通过
spring.cloud.gateway.routes[0].predicates[1] = Query=orderId

Before 路由工厂

Before 路由工厂也是时间路由工厂,只有在某个时间之前的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#在2024-08-19T11:11:11.000Z之前的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = Before=2024-08-19T11:11:11.000Z

After 路由工厂

After 路由工厂也是时间路由工厂,只有在某个时间之后的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#在2024-08-19T11:11:11.000Z之后的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = After=2024-08-19T11:11:11.000Z

Between 路由工厂

Between 路由工厂也是时间路由工厂,只有在某两个时间之间的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#在2024-08-19T11:11:11.000Z,2024-11-19T11:11:11.000Z 之间的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = After=2024-08-19T11:11:11.000Z,2024-11-19T11:11:11.000Z

Cookie 路由工厂

根据请求中的 Cookie 进行匹配,只有满足指定的 Cookie 才能够通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#匹配 .study.com 结尾的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = Cookie=SESSIONSESSION, \d+

RemoteAddr 路由工厂

根据请求的远程地址进行匹配,只有匹配指定的地址的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#匹配指定的远程地址的请求才能通过
spring.cloud.gateway.routes[0].predicates[1] = RemoteAddr=192.168.xxx.XXX

总结: Spring Cloud Gateway 给我们提供了丰富的路由断言规则,通过这些断言规则,Spring Cloud Gateway 可以灵活的根据各种条件匹配请求,并实复杂的路由逻辑。

如有不正确的地方请各位指出纠正。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词