SpringCloud Gateway工作流程
Spring Cloud Gateway的工作流程

具体的流程:
-
用户发送请求到网关
-
请求断言,用户请求到达网关后,由Gateway Handler Mapping(网关处理器映射)进行Predicates(断言),看一下哪一个符合路由规则,选择对应的过滤器进行处理
spring:cloud:gateway:routes:- id: api_routeuri: http://localhost:8123predicates:- Path=/api/**filters:- 'AddRequestHeader=token,wahahaawahaha'上面是使用
application.yml对网关进行路由规则的制定- id: api_route: 这是路由的标识符。这只是一个名称,可以是任何描述性的名称uri:http//localhost:8123是表示请求要转发的路径predicates:断言,比如指定了- Path=/api/**,任何到达网关的请求,如果请求资源定位符是/api/开头的都会进行匹配- 例如:网关的端口是
8090,我发送请求http://localhost:8090/api/hello,那么网关就会将请求转发到http://localhost:8123/api/hello,但是转发之前会经过filters,例如上面的AddRequestHeader=source,api,会在请求头加一个<source,api>
-
请求过滤:请求到达Gateway Web Handler,里面有很多Filter(过滤器),多个Filter像一个Chain(链条)一样串起来,符合路由断言的请求会先后经过这些Filter进行处理,在FIlter中可以进行限流、访问控制、参数校验、添加请求头等
-
服务处理:如果请求经过所有FIlter无异常,会将请求转发给真正的后端进行处理
-
响应过滤:后端处理完结果后,返回给Gateway的过滤器再次做处理,逻辑上可以称为 Post-Filters
总结:客户端的请求先通过匹配规则找到合适的路由,就能映射到具体的服务。然后请求经过过滤器处理后转发给具体的服务,服务处理后,再次经过过滤器处理,最后返回给客户端。
常见路由断言规则

自定义过滤器
如果要定义的过滤器比较复杂,可以使用自定义过滤器
@Component
public class CustomGlobalFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1. 获取请求头ServerHttpRequest request = exchange.getRequest();String path = INTERFACE_HOST + request.getPath().value();String method = request.getMethod().toString();log.info("请求唯一标识:" + request.getId());log.info("请求路径:" + path);log.info("请求方法:" + method);log.info("请求参数:" + request.getQueryParams());String sourceAddress = request.getLocalAddress().getHostString();log.info("请求来源地址:" + sourceAddress);log.info("请求来源地址:" + request.getRemoteAddress());ServerHttpResponse response = exchange.getResponse();// 2. 访问控制 - 黑白名单if (!IP_WHITE_LIST.contains(sourceAddress)) {response.setStatusCode(HttpStatus.FORBIDDEN);return response.setComplete();}// 3. 用户鉴权return chain.filter(exchange);}// 设置order调用顺序@Overridepublic int getOrder() {return -1;}public Mono<Void> handleNoAuth(ServerHttpResponse response) {response.setStatusCode(HttpStatus.FORBIDDEN);return response.setComplete();}public Mono<Void> handleInvokeError(ServerHttpResponse response) {response.setStatusCode(HttpStatus.INTERNAL_SERVER_ERROR);return response.setComplete();}
}
其实学习SpringCloud Gateway就是进行一些配置,没有什么资料比官方更丰富,所以强烈建议去看官方文档:官方文档
相关文章:
SpringCloud Gateway工作流程
Spring Cloud Gateway的工作流程 具体的流程: 用户发送请求到网关 请求断言,用户请求到达网关后,由Gateway Handler Mapping(网关处理器映射)进行Predicates(断言),看一下哪一个符合…...
西井科技与安通控股签署战略合作协议 共创大物流全新生态
2024年3月21日,西井科技与安通控股在“上海硅巷”新象限空间正式签署战略合作框架协议。双方基于此前在集装箱物流的成功实践与资源优势,积极拓展在AI数字化产品、新能源自动驾驶解决方案和多场景应用,以及绿色物流链等领域的深度探索、强强联…...
CCCorelib 点云RANSAC拟合球体(CloudCompare内置算法库)
文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 RANSAC是一种随机参数估计算法。RANSAC从样本中随机抽选出一个样本子集,使用最小方差估计算法对这个子集计算模型参数,然后计算所有样本与该模型的偏差,再使用一个预先设定好的阈值与偏差比较,当偏差小于阈值时…...
map china not exists. the geojson of the map must be provided.
map china not exists. the geojson of the map must be provided. 场景:引入echarts地图报错map china not exists. the geojson of the map must be provided. 原因: echarts版本过高,ECharts 之前提供下载的矢量地图数据来自第三方&…...
Redis如何删除大key
参考阿里云Redis规范 查找大key: redis-cli --bigkeys 1、String类型: Redis 4.0及以后版本提供了UNLINK命令,该命令与DEL命令类似,但它会在后台异步删除key,不会阻塞当前客户端,也不会阻塞Redis服务器的…...
JRT菜单
上一章搭建了登录界面的雏形和抽取了登录接口。给多组使用登录和菜单功能提供预留,做到不强行入侵别人业务。任何产品只需要按自己表实现登录接口后配置到容器即可共用登录界面和菜单部分。最后自己的用户关联到JRT角色表即可。 登录效果 这次构建菜单体系 首先用…...
《海王2》观后感
前言 我原本计划电影上映之后,去电影院观看的,但时间过得飞快,一眨眼这都快4月份了,查了一下,电影院早就没有排片了,所以只能在B站看了,这里不得不吐槽一下,原来花了4块钱购买观看还…...
[蓝桥杯 2023 省 A] 颜色平衡树:从零开始理解树上莫队 一颗颜色平衡树引发的惨案
十四是一名生物工程的学生,他已经7年没碰过信息学竞赛了,有一天他走在蓝桥上看见了一颗漂亮的颜色平衡树: [蓝桥杯 2023 省 A] 颜色平衡树 - 洛谷 十四想用暴力解决问题,他想枚举每个节点,每个节点代表…...
maya打开bvh脚本
目录 maya打开脚本编辑器 运行打开bvh脚本 maya导出bvh脚本 maya打开脚本编辑器 打开Maya软件,点击右下角 “脚本编辑器” 运行打开bvh脚本 https://github.com/jhoolmans/mayaImporterBVH/blob/master/bvh_importer.py import os import re from typing impo…...
【JavaSE】数据类型和运算符
前言 从这一篇我们开始Java的学习~ 欢迎关注个人主页:逸狼 创造不易,可以点点赞吗~ 如有错误,欢迎指出~ 目录 前言 Java第一个程序 字面常量 字面常量的分类 结合代码理解 类型转换 类型提升 byte与byte的运算 正确写法 字符串类型St…...
Docker 哲学 - ip 的组成规则 与 网关介绍
在 IP 地址中,我们通常将 IP 地址分为两部分:网络部分和主机部分。网络部分用于标识网络,主机部分用于标识该网络中的特定主机。 IP 地址的每个部分(也被称为一个八位组或一个字节)可以是从0到255的任何值。 一个 IPv4…...
数学建模竞赛真的是模型解题一般,但是论文出彩而获奖的吗?
最近,数乐君发现有同学会有这样的问题:在数学建模国赛中,会因为参赛团队的模型解题一般,但论文写得非常精彩而获奖吗? 是的,确实会存在这样的情况。 我们都知道数学建模竞赛最终都是以提交成品论文的形式…...
深度学习常见的三种模型
深度学习模型实际上是一个包含多个隐藏层的神经网络,目前主要有卷积神经网络(CNN)、深度置信网络(DBN)、循环神经网络(RNN)。 1) 卷积神经网络 在机器学习领域,卷积神经网络属于前…...
接口自动化测试分层设计与实践总结
🍅 视频学习:文末有免费的配套视频可观看 🍅 关注公众号:互联网杂货铺,回复1 ,免费获取软件测试全套资料,资料在手,涨薪更快 接口测试三要素: 参数构造 发起请求&#x…...
集合(下)Map集合的使用
文章目录 前言一、Map接口二、Map接口的实现类 1.HashMap类2.TreeMap类总结 前言 Map集合没有继承Collection接口,不能像List集合和Set集合那样直接使用Collection接口的方法。Map集合其自身通过以key到value的映射关系实现的集合,也有相应的许多方法。类…...
AAPT: error: resource android:attr/dialogCornerRadius not found.
ERROR:D:\android.gradle\caches\transforms-3\b3b98118f65da38d0ad9da84cfc70a72\transformed\appcompat-1.0.0\res\values-v28\values-v28.xml:5:5-8:13: AAPT: error: resource android:attr/dialogCornerRadius not found. 请帮我看看这个错误是什么意思。我改如何做。 这个…...
数字功放VS模拟功放,选择适合你的音频解决方案
数字功放和模拟功放是音频系统中常用的两种功放技术,适用于不同的音频应用,都具有各自的优势和特点。本文将为您详细介绍数字功放和模拟功放的差异,并帮助您找到适合自己的音频解决方案。 1、数字功放是一种利用数字信号处理技术的功放。它将…...
5.88 BCC工具之tcpsynbl.py解读
一,工具简介 tcpsynbl工具以直方图的形式显示SYN到达时的TCP SYN积压大小。这可以让我们了解应用程序距离达到积压限制并丢弃SYN(导致SYN重传产生性能问题)还有多远。 TCP SYN 数据包则通常用于启动 TCP 三次握手过程的第一次握手。 二,代码示例 #!/usr/bin/env python…...
GVRP实现vlan的自动创建和注册
拓扑图 资源已上传 流程 第一、每台交换机的全局及端口下使能GVRP功能 第二、配置交换机的二层连通性,交换机某些端口配置Trunk端口,并允许相应的vlan通过 第三、在交换机4和5配置静态vlan100,然后查看1和3交换机是否有vlan100的定义&…...
Oracle VM VirtualBox修改磁盘大小
一、 修改虚拟机磁盘大小 先把虚拟机停掉。再增加磁盘大小。 路径中有空格的用""包起来。 D:\Program Files\Oracle\VirtualBox>VBoxManage.exe modifyhd "D:\Program Files\VirtualBox VMs\mycentos\mycentos.vdi" --resize 30000 0%...10%...20%...3…...
保姆级教程:在Ubuntu 22.04上从源码编译COLMAP 3.9(含6个常见Bug解决方案)
在Ubuntu 22.04上从源码编译COLMAP 3.9的终极避坑指南三维重建技术正在重塑数字世界的构建方式,而COLMAP作为开源领域的标杆工具,其强大的多视图几何算法让学术研究和工业应用都受益匪浅。但当你第一次尝试在Ubuntu系统上编译这个工具时,可能…...
3分钟搞定Windows桌面整理:NoFences免费开源工具终极指南
3分钟搞定Windows桌面整理:NoFences免费开源工具终极指南 【免费下载链接】NoFences 🚧 Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 你是否每天都要在杂乱的Windows桌面上寻找文件ÿ…...
Unity低耦合可复用交互系统设计与落地
1. 为什么“交互系统”在Unity项目里总被反复重写?我带过三支不同规模的Unity团队,从百人MMO到五人独立游戏,几乎每个项目都会在第3个月左右出现一个标志性场景:美术同学发来一段动画片段,说“这个门要点击打开”&…...
写给新手的 asnumpy:昇腾原生 NumPy 到底是啥?
上周组里新来个校招生,看到代码里有个 asnumpy() 问我:“哥,这跟 NumPy 有啥区别?为啥不直接用 NumPy?” 好问题。今天一次说清楚。 asnumpy 是啥? asnumpy 是昇腾 NPU 上的原生 NumPy 实现。 一句话说清楚…...
AI智能体Skills设计:从API工具到核心能力的工程实践
1. 从“工具”到“能力”:重新理解AI智能体的Skills最近和几个做AI应用开发的朋友聊天,发现一个挺有意思的现象:大家一提到给智能体加“Skills”,第一反应往往是去翻看官方文档,找那个叫“Tools”或者“Functions”的列…...
PET模型完全指南:如何利用完形填空问题实现少样本文本分类与自然语言推理
PET模型完全指南:如何利用完形填空问题实现少样本文本分类与自然语言推理 【免费下载链接】pet This repository contains the code for "Exploiting Cloze Questions for Few-Shot Text Classification and Natural Language Inference" 项目地址: htt…...
Wireshark TCP重传与乱序深度分析实战指南
1. 这个pcap文件不是“普通流量”,而是TCP重传与乱序的教科书级现场录像你打开Wireshark,载入wireshark0051.pcap,第一眼看到的不是HTTP请求、DNS查询或TLS握手——而是一连串标红的[TCP Retransmission]、[TCP Out-Of-Order]和[TCP Dup ACK]…...
OpenSpeedy:终极免费游戏加速神器,一键释放游戏潜能
OpenSpeedy:终极免费游戏加速神器,一键释放游戏潜能 【免费下载链接】OpenSpeedy 🎮 An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy 还在为单机游戏中的卡顿和缓慢进度而烦恼吗&#…...
Java SE与Spring Boot在智慧城市中的应用
Java SE与Spring Boot在智慧城市中的应用 在互联网大厂求职的面试中,技术栈与场景应用是考察重点。今天,我们将通过一位搞笑程序员燕双非的面试经历来了解Java SE与Spring Boot在智慧城市中的应用。 第一轮面试 场景:智慧城市的背景 面试官&a…...
3步实现AI动作复制:如何用ComfyUI-MimicMotionWrapper让普通人拥有专业舞者动作
3步实现AI动作复制:如何用ComfyUI-MimicMotionWrapper让普通人拥有专业舞者动作 【免费下载链接】ComfyUI-MimicMotionWrapper 项目地址: https://gitcode.com/gh_mirrors/co/ComfyUI-MimicMotionWrapper 你是否想过让照片中的人物动起来,赋予静…...
