- id: system-admin-api # 路由的编号
uri: grayLb://system-server
predicates: # 断言,作为路由的匹配条件,对应 RouteDefinition 数组
- Path=/admin-api/system/**
filters:
- RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs # 配置,保证转发到 /v3/api-docs
我总结一下上面的意思:
请求路径如果是以/admin-api/system/开头的,全部被网关转发到system-server服务里面去
id
是 当前路由的唯一标识符。一般在代码中你不需要特别处理这个
id
,主要是配置用途
其次
filters:
- RewritePath=/admin-api/system/v3/api-docs, /v3/api-docs
这里的 filters
是 Gateway 过滤器(Filter) 的配置,用于在请求转发前或响应返回后,修改请求或响应的行为
🧩 filters 是什么?
在 Spring Cloud Gateway 中:
-
每个路由(
Route
)可以定义一组过滤器(filters
) -
用于对 HTTP 请求或响应 做增强、处理、变更
-
包括:修改请求路径、添加请求头、权限校验、日志、限流等
这是 Spring Cloud Gateway 提供的一个内置过滤器,叫做 RewritePath
,用于 重写请求路径。
🔍 作用:
当用户访问路径 /admin-api/system/v3/api-docs
时:
-
原始请求路径是:
/admin-api/system/v3/api-docs
-
Gateway 把它重写为:
/v3/api-docs
-
然后再转发到目标服务
grayLb://system-server
✅ 结果:
假设 system-server
服务的 Swagger
接口暴露在 /v3/api-docs
,但是你对外提供的是一个更清晰的 API 网关路径 /admin-api/system/v3/api-docs
,通过这个 filter 就可以实现映射。
🧰 常用 Gateway Filters 示例
Filter 名称 | 作用 | 示例 |
---|---|---|
AddRequestHeader | 添加请求头 | - AddRequestHeader=X-Token, abc123 |
RemoveRequestHeader | 移除请求头 | - RemoveRequestHeader=Cookie |
RewritePath | 重写请求路径 | - RewritePath=/admin/(.*), /$1 |
PrefixPath | 添加前缀到请求路径 | - PrefixPath=/api |
StripPrefix | 删除路径前缀(用于微服务场景) | - StripPrefix=1 |
Retry | 请求重试策略 | - name: Retry |
自定义过滤器 | 复杂逻辑(鉴权、灰度、限流等) | - name: MyCustomFilter |