news 2026/3/3 17:21:22

【SpringCloud | 第4篇】Gateway网关统一入口

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【SpringCloud | 第4篇】Gateway网关统一入口

文章目录

  • 网关作用
  • 工作原理
  • predicates 断言
    • 1. 写法
    • 2. 断言机制
    • 3. 自定义断言
  • filters 过滤器
    • 1. RewritePath GatewayFilter Factory(路径重写)
    • 2. 默认 filter
    • 3. Global Filter全局过滤器
    • 4. 自定义过滤器
  • 跨域

网关作用

官方文档:https://docs.spring.io/spring-cloud-gateway/reference/4.3/index.html

Spring Cloud Gateway:

  1. Server WebFlux ——spring-cloud-starter-gateway
  2. Server MVC —— spring-cloud-starter-gateway-mvc(性能较差)

工作原理

spring:profiles:active:devapplication:name:easylive-cloud-gatewaycloud:gateway:routes:#视频模块-id:videouri:lb://easylive-cloud-webpredicates:-Path=/web/**filters:-StripPrefix=1#互动服务-id:interacturi:lb://easylive-cloud-interactpredicates:-Path=/interact/**filters:-StripPrefix=1

spring-cloud-gateway下的配置:

  1. id:服务唯一标识
  2. uri:服务路由地址(lb表示负载均衡
  3. predicates:断言,判断什么时候路由到该服务
  4. filters:过滤条件
  5. order:顺序,值越小,优先级越高

predicates 断言

1. 写法

文档:https://docs.spring.io/spring-cloud-gateway/reference/4.3/spring-cloud-gateway-server-webflux/configuring-route-predicate-factories-and-filter-factories.html

短写法:

长写法:

2. 断言机制

文档:https://docs.spring.io/spring-cloud-gateway/reference/4.3/spring-cloud-gateway-server-webflux/request-predicates-factories.html#path-route-predicate-factory

3. 自定义断言

可以仿照 QueryRoutePredicateFactory 编写一个自定义断言配置。
![](https://i-blog.csdnimg.cn/direct/285fef32e8ea4fa28e9f1bd59ef084e7.png)
自定义断言类的类名中 RoutePredicateFactory 之前就是就是配置文件中要写入的断言名 name 。

filters 过滤器


官方文档:https://docs.spring.io/spring-cloud-gateway/reference/4.3/spring-cloud-gateway-server-webflux/gatewayfilter-factories.html

1. RewritePath GatewayFilter Factory(路径重写)

RewritePath GatewayFilter Factory 路径重写 filter:

2. 默认 filter

对所有路径均有效的过滤器。

官方文档:https://docs.spring.io/spring-cloud-gateway/reference/4.3/spring-cloud-gateway-server-webflux/gatewayfilter-factories/default-filters.html

3. Global Filter全局过滤器

官方文档:https://docs.spring.io/spring-cloud-gateway/reference/4.3/spring-cloud-gateway-server-webflux/global-filters.html

@Component@Slf4jpublicclassGatewayGlobalRequestFilterimplementsGlobalFilter,Ordered{@OverridepublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){// 获取请求的URIStringrawpath=exchange.getRequest().getURI().getRawPath();// 判断请求的URI是否是内部APIif(rawpath.indexOf(Constants.INNER_API_PREFIX)!=-1){thrownewBusinessException(ResponseCodeEnum.CODE_404);}log.info("这个是全局过滤器, {}",rawpath);// 继续执行下一个过滤器returnchain.filter(exchange);}@OverridepublicintgetOrder(){// 设置过滤器的优先级,数字越小优先级越高return0;}}

4. 自定义过滤器

仿照实现 GatewayFilterFactory 接口的某个 FilterFactory 实现。

跨域

跨域(Cross-Origin Resource Sharing,简称CORS)是一种安全策略,用于限制一个域的网页如何与另一个域的资源进行交互。这是浏览器实现的同源策略(Same-Origin Policy)的一部分,旨在防止恶意网站通过一个域的网页访问另一个域的敏感数据。

由于浏览器实施的同源策略(Same Origin Policy),这是一种基本的安全协议,它确保了浏览器的稳定运行。没有同源策略,浏览器的许多功能可能无法正常工作。整个Web体系建立在同源策略之上,浏览器是这一策略的具体实现。该策略禁止来自不同域的JavaScript脚本与另一个域的资源进行交互。所谓同源,指的是两个页面必须具有相同的协议(protocol)、域名(host)和端口号(port)。

请求是能正常的发出去的,后端也正常的响应了,浏览器是把响应给拦截了,所以会出现:has been blocked by CORS policy: Response to preflight request does not pass access control check

  • 单体项目解决跨域:
    (1)在 Controller 上添加@CrossOrigin注解。
    (2)编写 CrossFilter。

  • 微服务解决跨域
    微服务场景下,如果要对每一个服务单独编写跨域逻辑,比较繁琐。
    Gateway 网关对接前端入口,由 Gateway 处理跨域,所有请求经过网关,网关处理后,所有的响应都允许跨域。

官方文档:https://docs.spring.io/spring-cloud-gateway/reference/4.3/spring-cloud-gateway-server-webflux/cors-configuration.html

服务端通过在响应头中添加某些信息,告知浏览器哪些来源可以访问,浏览器就不再拦截响应。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/3/3 19:00:47

细节定成败!鹧鸪云让储能配置精准落地

一套“电池逆变器”的储能系统&#xff0c;看似简单却暗藏玄机。不少储能项目收效不及预期&#xff0c;问题往往藏在被忽视的配置细节里。而鹧鸪云储能仿真软件&#xff0c;正是破解这一难题的关键——它以对配置条件“完整性”的深刻洞察&#xff0c;让每一套储能方案都经得起…

作者头像 李华
网站建设 2026/2/28 20:22:45

基于Qwen3-8B构建智能对话系统:从ollama下载到部署

基于Qwen3-8B构建智能对话系统&#xff1a;从ollama下载到部署 在大模型席卷各行各业的今天&#xff0c;越来越多企业开始尝试将AI助手嵌入业务流程——客服自动应答、合同内容提取、知识库问答……但现实往往令人却步&#xff1a;主流闭源模型如GPT-4虽强&#xff0c;却存在数…

作者头像 李华
网站建设 2026/3/4 0:09:42

模块化公链的2025:动态分片、AI审计与量子安全的成本革命

“开发周期缩短5个月&#xff0c;成本直降90%的实战方法论”引言当区块链从“技术实验”进化为数字社会的底层操作系统&#xff0c;公链开发已不再是代码的堆砌&#xff0c;而是一场关于生态、成本与技术的精密博弈。2025年&#xff0c;全球公链网络承载超12万亿美元资产&#…

作者头像 李华
网站建设 2026/3/1 15:57:20

从Transformer模型详解到Seed-Coder-8B-Base的应用落地

从Transformer模型详解到Seed-Coder-8B-Base的应用落地 在现代软件开发节奏日益加快的今天&#xff0c;程序员每天面对的不仅是复杂的业务逻辑&#xff0c;还有大量重复、机械甚至容易出错的编码任务。一个函数签名写完后&#xff0c;紧接着是样板式的异常处理&#xff1b;调用…

作者头像 李华
网站建设 2026/2/25 23:16:15

8、Qt 编程中的文件、流与 XML 处理

Qt 编程中的文件、流与 XML 处理 1. 跨平台文件处理的挑战 在开发跨平台应用程序时,处理文件是一个复杂的问题。不同平台在文件系统的基本特性上存在差异,例如 Unix 系统使用斜杠 / 作为路径分隔符,而 Windows 平台使用反斜杠 \ 。此外,还有不同的行尾符和编码方式等…

作者头像 李华
网站建设 2026/3/3 20:33:37

9、Qt应用程序中的用户帮助功能实现

Qt应用程序中的用户帮助功能实现 1. 提供帮助的重要性与方式 在应用程序开发中,用户有时需要帮助。Qt提供了多种方式为用户提供指导,如向导、工具提示、状态栏消息和指向产品文档的链接等。添加帮助功能时,不能仅依赖F1键显示帮助窗口,有效的帮助应融入应用程序且不干扰用…

作者头像 李华