spring cloud gateway核心是配置驱动的路由转发,通过yaml定义id、uri、predicates(如path=/api/user/**)和filters(如stripprefix=2),支持lb://服务发现与全局过滤器。

Spring Boot 配置 Spring Cloud Gateway 实现统一网关路由转发,核心是定义“请求进来的路径匹配规则”和“转发到哪里”,再配合谓词(Predicate)控制匹配条件、过滤器(Filter)增强处理逻辑。整个过程不依赖额外注解或复杂编码,靠配置驱动,上手快、扩展性强。
基础依赖与启动配置
在 Spring Boot 项目中引入 spring-cloud-starter-gateway 即可启用网关能力,无需 WebMVC(会冲突),也不需要 @EnableXXX 注解:
- 确保父 POM 使用 Spring Boot 2.6+ 或 3.x(推荐 3.2+),对应 Spring Cloud 版本如 2022.0.x 或 2023.0.x
- pom.xml 中添加依赖:
<dependency><groupid>org.springframework.cloud</groupid><artifactid>spring-cloud-starter-gateway</artifactid></dependency>
- 启动类保持标准 @SpringBootApplication,无需额外配置
YAML 方式定义静态路由(最常用)
在 application.yml 中直接声明 routes,每条路由含唯一 id、目标 uri 和至少一个 predicate:
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
-
uri 支持两种格式:普通 HTTP 地址(
http://user-service:8080)或服务发现地址(lb://user-service,自动负载均衡) -
Path 谓词最常用:用
/**表示路径通配,例如- Path=/api/user/**匹配所有以该前缀开头的请求 - 可组合多个谓词,如同时限制方法 + 路径:
- Path=/api/order/**和- Method=POST
示例配置:
spring:
cloud:
gateway:
routes:
- id: user_route
uri: lb://user-service
predicates:
- Path=/api/user/**
- id: order_route
uri: http://192.168.1.100:8081
predicates:
- Path=/api/order/**
- Method=GET
转发行为的关键细节
默认情况下,Spring Cloud Gateway 会自动重写路径:请求 /api/user/list 匹配 Path=/api/user/** 后,转发时去掉前缀,实际调用下游的 /list。
- 若需保留完整路径,加
StripPrefix=0过滤器;若想去掉两层前缀(如 /api/v1),设为StripPrefix=2 - 常见内置过滤器如
AddRequestHeader、Retry、RequestRateLimiter可直接在 filters 下配置 - 全局过滤器(如 JWT 校验、日志记录)通过实现
GlobalFilter接口注册,对所有路由生效
支持服务发现的路由(对接 Eureka/Nacos)
当后端服务注册到注册中心时,只需把 uri 改成 lb://服务名,Gateway 自动从注册中心拉取实例列表并负载均衡:
- 确保网关也注册到同一注册中心(如添加
spring-cloud-starter-netflix-eureka-client或spring-cloud-starter-alibaba-nacos-discovery) - Eureka 地址、服务名大小写必须与注册中心一致(如 Eureka 中显示为
USER-SERVICE,则 uri 写lb://USER-SERVICE) - 默认使用轮询策略,也可通过
LoadBalancerClientFilter或自定义 LoadBalancer 调整










