Spring Cloud Gateway 统一服务入口
文章目录Spring Cloud Gateway 统一服务入口一、依赖版本Boot 4 与 Boot 3 差异二、为什么需要网关三、依赖与启动类3.1 gateway/pom.xml3.2 启动类四、配置文件4.1 application-dev.yml4.3 路由字段说明五、断言Route Predicate六、过滤器Gateway Filter七、总结Spring Cloud Gateway 统一服务入口一、依赖版本组件版本说明Java21Spring Boot4.1.0父 POM 统一管理Spring Cloud2025.1.2spring-cloud-dependenciesSpring Cloud Alibaba2025.1.0.0spring-cloud-alibaba-dependencies父 POM 版本锁定propertiesjava.version21/java.versionspring-cloud.version2025.1.2/spring-cloud.versionspring-cloud-alibaba.version2025.1.0.0/spring-cloud-alibaba.version/propertiesBoot 4 与 Boot 3 差异对比项Boot 3Boot 4当前项目Gateway 依赖spring-cloud-starter-gatewayspring-cloud-starter-gateway-server-webflux路由配置spring.cloud.gateway.routesspring.cloud.gateway.server.webflux.routes默认过滤器spring.cloud.gateway.default-filtersspring.cloud.gateway.server.webflux.default-filters旧 starter 在 Cloud 2025 BOM 中已移除继续使用会报依赖无法加载。二、为什么需要网关微服务拆分后Nacos 解决注册发现LoadBalancer 解决负载均衡OpenFeign 解决服务间调用。但接口仍分散在各服务端口上问题说明入口分散客户端需分别访问 8080、8081 等重复鉴权每个服务都要做权限校验Gateway 作为统一入口外部只访问9000内部按路由转发到lb://order-service/lb://product-service。服务端口注册名gateway9000gatewayorder-service8080order-serviceproduct-service8081 / 8082 / 8083product-service网关是否和拦截器切面等重复冗余?网关过滤器大门外运行在请求进入微服务集群之前是流量的大门。它属于WebFluxNetty层不依赖 Servlet 容器。拦截器/切面大门内运行在请求已经进入具体的微服务应用之后。它属于 Spring MVCServlet 容器依赖具体的 Controller 或 Service。如果网关已经拦截如 Token 过期请求直接返回 401根本不会到达拦截器和切面——这节省了内部服务的线程资源。结论网关管“能不能进门”拦截器管“进门后坐哪”切面管“坐下后具体怎么做”。三者配合而不是互相替代。三、依赖与启动类3.1 gateway/pom.xml!-- Gateway WebFluxBoot 4 新 starter禁止引入 spring-boot-starter-web --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway-server-webflux/artifactId/dependency!-- lb://服务名 负载均衡必须单独引入 --dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-loadbalancer/artifactId/dependency!-- Nacos 服务发现 --dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency3.2 启动类SpringBootApplication// Spring Boot 自动配置EnableDiscoveryClient// 注册到 Nacos服务名 gatewaypublicclassGatewayApplication{publicstaticvoidmain(String[]args){// 应用入口SpringApplication.run(GatewayApplication.class,args);}}四、配置文件4.1 application-dev.ymlserver:port:9000# 网关监听端口spring:cloud:nacos:discovery:server-addr:127.0.0.1:8848# Nacos 注册中心地址loadbalancer:nacos:enabled:true# 启用 Nacos 权重/集群负载均衡策略gateway:server:webflux:default-filters:-AddResponseHeaderX-Gateway,spring-cloud-gateway# 全局响应头routes:-id:order-route# 路由 IDuri:lb://order-service# 负载均衡转发到 order-servicepredicates:-Path/order/**# 路径断言-MethodGET,POST# 方法断言filters:-AddRequestHeaderX-Request-Source,gateway# 添加请求头-id:product-route# 路由 IDuri:lb://product-service# 负载均衡转发到 product-servicepredicates:-Path/product/**# 路径断言-MethodGET,POST# 方法断言filters:-AddRequestHeaderX-Request-Source,gateway# 添加请求头-id:product-by-id-route# 带 Query 断言的路由uri:lb://product-service# 目标服务predicates:-Path/product/getProductById# 精确路径-Queryid,\d# id 必须为数字-MethodGET# 仅 GETfilters:-AddRequestHeaderX-Matched-Route,product-by-id# 标记命中的路由-id:order-api-route# StripPrefix 示例路由uri:lb://order-service# 目标服务predicates:-Path/api/order/**# /api/order/xxxfilters:-StripPrefix1# 去掉 /api 前缀转发为 /order/xxx-id:product-legacy-route# RewritePath 示例路由uri:lb://product-service# 目标服务predicates:-Path/legacy/product/**# 旧路径filters:-RewritePath/legacy/product/(?segment.*),/product/${segment}# 重写为新路径logging:level:org.springframework.cloud.gateway:debug# Gateway 调试日志org.springframework.cloud.loadbalancer:debug# 负载均衡调试日志4.3 路由字段说明字段说明id路由唯一标识uri目标地址lb://服务名从 Nacos 取实例并负载均衡predicates断言全部满足才匹配ANDfilters匹配后对请求/响应的处理五、断言Route Predicateyml 中的断言字符串由Route Predicate Factory解析多个断言默认AND关系。名称说明配置示例Path路径匹配Path/product/**MethodHTTP 方法匹配MethodGET,POSTQueryQuery 参数正则匹配Queryid, \dAfter指定时间之后的请求After2024-01-01T00:00:00.00008:00[Asia/Shanghai]Before指定时间之前的请求Before2025-12-31T23:59:59.00008:00[Asia/Shanghai]Between两个时间之间的请求Between开始时间, 结束时间HeaderHeader 值正则匹配HeaderX-Request-Id, \dCookieCookie 值正则匹配Cookietoken, .Host请求 Host 匹配Host**.example.comRemoteAddr请求 IP 段匹配RemoteAddr192.168.1.1/24时间断言设为未来时间时当前请求会 404路由不匹配。六、过滤器Gateway FilterPredicate 决定走哪条路由Filter 决定路上做什么。Filter 分Pre转发后端前和Post响应返回前。名称类型说明配置示例AddResponseHeaderGatewayFilter / default-filters添加响应 HeaderAddResponseHeaderX-Gateway, spring-cloud-gatewayAddRequestHeaderGatewayFilter添加请求 HeaderAddRequestHeaderX-Request-Source, gatewayAddRequestParameterGatewayFilter添加 Query 参数AddRequestParameteruserName, biteRemoveRequestHeaderGatewayFilter删除请求 HeaderRemoveRequestHeaderX-Request-FooRemoveResponseHeaderGatewayFilter删除响应 HeaderRemoveResponseHeaderX-Response-FooStripPrefixGatewayFilter去掉路径前缀段StripPrefix1RewritePathGatewayFilter正则重写路径RewritePath/legacy/product/(?segment.*), /product/${segment}PrefixPathGatewayFilter添加路径前缀PrefixPath/apiRequestRateLimiterGatewayFilter限流需 Redisname: RequestRateLimiter redis 参数RetryGatewayFilter失败重试name: Retryretries: 3RequestSizeGatewayFilter限制请求体大小name: RequestSizemaxSize: 5000000LoadBalancerClientFilterGlobalFilter解析lb://并负载均衡内置无需 ymlGateway Metrics FilterGlobalFilter监控指标需 actuator执行顺序order 越小越先执行order 相同时defaultFilterGatewayFilterGlobalFilter。七、总结主题要点版本Boot 4.1.0 Cloud 2025.1.2 Alibaba 2025.1.0.0 Java 21依赖gateway-server-webfluxloadbalancernacos-discovery配置前缀spring.cloud.gateway.server.webflux.*入口gateway:9000 →lb://order-service/lb://product-service负载均衡loadbalancer.nacos.enabled: true断言多条件 ANDPath / Method / Query 等过滤器default-filters 全局StripPrefix / RewritePath 路径变换

相关新闻

Java爬虫入门实战:手把手教你抓取豆瓣电影Top250数据

Java爬虫入门实战:手把手教你抓取豆瓣电影Top250数据

1. 从零到一:为什么选择豆瓣Top250作为爬虫练手项目 如果你刚开始接触Java网络爬虫,或者想找一个经典的练手项目来巩固基础,豆瓣电影Top250绝对是一个教科书级别的选择。我刚开始学爬虫那会儿,也试过很多网站,有的反爬…

2026/10/13 3:42:07 阅读更多 →
拯救者笔记本性能调优从入门到进阶:用轻量开源工具接管硬件的完整路线图

拯救者笔记本性能调优从入门到进阶:用轻量开源工具接管硬件的完整路线图

拯救者笔记本性能调优从入门到进阶:用轻量开源工具接管硬件的完整路线图 【免费下载链接】LenovoLegionToolkit Lightweight Lenovo Vantage and Hotkeys replacement for Lenovo Legion laptops. 项目地址: https://gitcode.com/gh_mirrors/le/LenovoLegionToolk…

2026/10/7 1:53:06 阅读更多 →
网盘直链下载助手亲测上手:三步装好脚本,直取8大网盘真实下载链接

网盘直链下载助手亲测上手:三步装好脚本,直取8大网盘真实下载链接

网盘直链下载助手亲测上手:三步装好脚本,直取8大网盘真实下载链接 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘…

2026/10/12 10:27:38 阅读更多 →

最新新闻

Socket编程预备:网络分层、TCP/UDP与字节序的底层思维框架

Socket编程预备:网络分层、TCP/UDP与字节序的底层思维框架

我见过太多人抱着《Unix网络编程》硬啃,代码敲了一百多行,却连bind()为什么有时要写地址、有时可以写INADDR_ANY都说不清。这不是代码量不够,而是缺了 socket 编程开始的“预备”环节。很多人把“预备”理解成装个 Linux、装好编译环境&#…

2026/10/13 3:41:54 阅读更多 →
Kettle 9.3 实战指南:安装配置、数据库连接、转换调度与避坑

Kettle 9.3 实战指南:安装配置、数据库连接、转换调度与避坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:41:54 阅读更多 →
BERT多卡训练实战:从硬件配置到PyTorch DDP加速全指南

BERT多卡训练实战:从硬件配置到PyTorch DDP加速全指南

我最早接触 BERT 训练是在一块 16GB 显存的显卡上跑的,batch size 调到 4 就开始爆显存,那会儿我还以为是代码写得不对。后来把整机升级成多 GPU 服务器、用 PyTorch 的分布式训练把 BERT-base 训起来之后,才真正理解这类模型为什么"吃显…

2026/10/13 3:41:54 阅读更多 →
学校工资管理系统数据库设计实战指南

学校工资管理系统数据库设计实战指南

简介:本资源是一份面向高校数据库原理及应用课程学习者的高分课程设计实践材料,聚焦学校工资管理系统的完整开发实现,适用于数据库设计、SQL Server应用及课程设计报告撰写等教学场景。压缩包共3个文件,含1份详尽的Word版课程设计…

2026/10/13 3:41:54 阅读更多 →
AI模型路由实战:用星链4SAPI化解大模型调用成本失控

AI模型路由实战:用星链4SAPI化解大模型调用成本失控

上个月看到账单的时候,我整个人是懵的。调用次数只比上上个月涨了 12%,费用却翻了将近一倍。一开始我以为是模型厂商在悄悄调价,拉出明细一看才发现,问题根本不在单价,而在于所有请求无差别地打向了同一个高配模型&…

2026/10/13 3:41:54 阅读更多 →
以太坊智能合约可升级性实战:代理模式、存储布局与UUPS升级方案详解

以太坊智能合约可升级性实战:代理模式、存储布局与UUPS升级方案详解

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 3:40:54 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 21:05:09 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →