网关层设计
引用文件
目录
引言
本设计文档聚焦于 yudao-cloud 的网关层,系统性阐述网关作为统一入口的关键职责:请求路由、负载均衡、安全认证与日志记录。文档将深入解析网关的启动流程、配置管理与组件初始化过程,梳理请求在网关层的完整处理链路,并给出配置最佳实践与性能优化建议,帮助读者快速理解并高效运维该网关。
项目结构
网关模块位于 yudao-gateway,采用 Spring Boot + Spring Cloud Gateway 架构,核心文件组织如下:
- 启动类:GatewayServerApplication
- 配置:application.yaml 及按环境拆分的
application-{env}.yaml - 过滤器:安全认证、跨域、访问日志、灰度负载均衡
- 工具类:安全框架与 Web 框架工具
- 依赖:基于 Maven 的模块化 POM,集成 Nacos、监控、RPC、Knife4j 等能力
图表来源
- GatewayServerApplication.java
- application.yaml
- application-dev.yaml
- CorsFilter.java
- AccessLogFilter.java
- TokenAuthenticationFilter.java
- GrayReactiveLoadBalancerClientFilter.java
- SecurityFrameworkUtils.java
- WebFrameworkUtils.java
- BannerApplicationRunner.java
- pom.xml
章节来源
核心组件
- 启动类与配置
- 启动类负责引导 Spring Boot 应用,应用名为 gateway-server,端口默认 48080。
- 配置通过 spring.config.import 串联本地与 Nacos 配置,支持 dev/prod 环境切换。
- 过滤器链
- 跨域过滤器:统一设置 CORS 响应头,处理 OPTIONS 预检。
- 访问日志过滤器:记录请求/响应上下文、耗时与 JSON 格式化输出。
- 安全认证过滤器:校验 Authorization Bearer Token,透传用户信息至下游。
- 灰度负载均衡过滤器:基于自研灰度负载均衡器选择实例。
- 工具类
- SecurityFrameworkUtils:提取与注入登录用户信息、移除伪造头。
- WebFrameworkUtils:租户 ID 透传、客户端 IP 获取、JSON 响应写出。
章节来源
- GatewayServerApplication.java
- application.yaml
- CorsFilter.java
- AccessLogFilter.java
- TokenAuthenticationFilter.java
- GrayReactiveLoadBalancerClientFilter.java
- SecurityFrameworkUtils.java
- WebFrameworkUtils.java
架构总览
网关整体以 Spring Cloud Gateway 为核心,结合 Nacos 配置中心、监控与 RPC 能力,形成统一入口。请求在进入下游服务前,依次经过跨域、日志、认证与灰度负载均衡等过滤器。
图表来源
- CorsFilter.java
- AccessLogFilter.java
- TokenAuthenticationFilter.java
- GrayReactiveLoadBalancerClientFilter.java
详细组件分析
启动流程与配置管理
- 启动流程
- 启动类加载 Spring Boot 自动装配,随后读取 application.yaml。
- 配置导入策略:优先加载本地
application-{env}.yaml,再加载 Nacos 上同名配置,最后加载通用配置。 - 端口与日志:默认端口 48080,日志文件路径可配置。
- 组件初始化
- 过滤器自动装配,按 order 顺序参与请求处理。
- 工具类与 Runner 在容器启动后可用。
图表来源
章节来源
跨域过滤器(CorsFilter)
- 功能要点
- 识别跨域请求,统一设置允许来源、方法、头部与预检缓存。
- 对 OPTIONS 预检请求直接返回 200。
- 适用场景
- 前后端分离、移动端或第三方接入时的跨域场景。
图表来源
章节来源
访问日志过滤器(AccessLogFilter)
- 功能要点
- 记录请求/响应上下文:URL、方法、查询参数、请求头、请求体、响应体、状态码、耗时。
- 支持 JSON/Form 请求体读取与响应体合并(解决分段传输)。
- 输出到控制台,便于排查。
- 性能注意
- 对大体积请求/响应体需谨慎开启日志,避免 IO 压力。
图表来源
章节来源
安全认证过滤器(TokenAuthenticationFilter)
- 功能要点
- 从 Authorization 头提取 Bearer Token,调用系统模块的 Token 校验接口。
- 成功则将用户信息注入请求头与交换上下文,失败也继续转发(具体鉴权由下游服务完成)。
- 使用本地缓存加速用户信息解析,避免频繁远程校验。
- 关键流程
图表来源
章节来源
灰度负载均衡过滤器(GrayReactiveLoadBalancerClientFilter)
- 功能要点
- 识别以 grayLb 为协议前缀的路由,委托灰度负载均衡器选择实例。
- 与 Spring Cloud LoadBalancer 集成,支持生命周期事件回调。
- 适用场景
- 灰度发布、金丝雀流量、按标签/权重分流。
图表来源
章节来源
工具类(SecurityFrameworkUtils、WebFrameworkUtils)
- SecurityFrameworkUtils
- 提供 Authorization 头解析、登录用户注入/移除、请求头 login-user 的序列化与编码。
- WebFrameworkUtils
- 提供租户 ID 透传、客户端 IP 获取、统一 JSON 响应写出。
章节来源
依赖关系分析
- 模块依赖
- 网关模块依赖 yudao-module-system-api(用于 OAuth2 Token 校验)、Spring Cloud Gateway、Nacos 注册/配置中心、监控与 RPC 负载均衡。
- 根 POM
- 根 POM 定义了多环境 Profile 与仓库镜像,确保依赖拉取稳定。
图表来源
章节来源
性能考量
- 过滤器顺序与开销
- 访问日志过滤器顺序靠前,建议仅在调试/生产审计场景启用,避免对高并发造成额外 IO 压力。
- 跨域过滤器成本低,建议保持开启。
- 认证与缓存
- Token 校验采用本地缓存,建议合理设置缓存失效时间与容量,避免热点失效导致抖动。
- 负载均衡
- 灰度负载均衡器需关注实例健康与标签一致性,避免错误路由引发下游压力。
- 配置与网络
- Nacos 地址与命名空间需稳定,避免频繁重连影响启动与运行。
- 监控与可观测性
- 结合 yudao-spring-boot-starter-monitor 与链路追踪,定位瓶颈与异常。
故障排查指南
- 启动阶段
- 若端口占用或 Nacos 连接失败,检查 application.yaml 中 server.port 与 spring.cloud.nacos.* 配置。
- 启动完成后,BannerApplicationRunner 会在控制台输出文档与教程链接,便于快速定位资源。
- 认证失败
- 确认 Authorization 头格式为 Bearer Token,且系统模块 Token 校验接口可达。
- 检查本地缓存是否命中,必要时清理缓存或缩短缓存时间。
- 跨域问题
- 确认 CorsFilter 是否生效,OPTIONS 预检是否返回 200。
- 日志缺失
- 确认 AccessLogFilter 是否处于过滤器链首位,且日志级别允许输出。
- 灰度路由无效
- 确认路由 URL 使用 grayLb 协议前缀,灰度负载均衡器是否正确选择实例。
章节来源
- BannerApplicationRunner.java
- application.yaml
- TokenAuthenticationFilter.java
- CorsFilter.java
- AccessLogFilter.java
- GrayReactiveLoadBalancerClientFilter.java