SpringCloudGateway
作用
- 统一管理,易于监控
- 安全,限流:在网关层就过滤掉非法信息
- nginx外部网关,gateway内网
- nginx可以使用Lua或Kong来增强
概念
- id:名称随意
- uri: 被代理的服务地址。id和uri必填,谓词和过滤器非必填
- 谓词:可以用于匹配访问gateway的uri,匹配则当前路由生效,
- 过滤器:GatewayFilter的实例,在代理之前或之后添加逻辑,灵活度最高
处理流程
- 首先Handler Mapping对URL进行处理,再交给Web Handler,它调用被过滤器前半部分进行处理,处理完成后调用真实被代理的服务,被代理的服务响应后,执行过滤器后半部分的逻辑,把结果返回给WebHandler,再返回给HandlerMapping,最终返回给客户端
使用
gateway:discovery:locator:enabled: true # 启用自动根据服务ID生成路由lower-case-service-id: true # 设置路由的路径为小写的服务ID
yml配置
- list中的元素如果有多个字段,需要"-"和冒号分别指定每个字段和值;如果只有一个字段,可以使用逗号分割
- 对象类型的配置,可以通过"-"和冒号配置每个字段
- Map类型:key,value通过冒号分割
predicates:- Path=/sendOrder- Query=name,ma.- name: Queryargs:param: idregexp: \d+#predicates是List, 它的元素是public class PredicateDefinition {@NotNullprivate String name;private Map<String, String> args = new LinkedHashMap<>();}等号分割转成对象的写法不是yml内置支持的
谓词
- 谓词配置是一个List,其中的元素可以是特定格式的字符串,或者对象。字符串写法:等号分割,第1部分是谓词名称name,第二部分args逗号分割,值保存进Map value,Map key自动生成。对象写法:PredicateDefinition
- 如果args中本身有逗号和冒号,就不能使用字符串格式
- shortcutType方法定义了args参数到ConfigClass的解析方式,DEFAULT:shortcutFieldOrder去掉shortcutFieldPrefix前缀对应ConfigClass字段名称,args参数的val对应ConfigClass的字段值;GATHER_LIST:逗号分割的List;GATHER_LIST_TAIL_FLAG:逗号分割的List,但最后一个值是布尔值,最终转成2个key的Map,第一个key的值是布尔值前面的List,第二个是布尔值
- 用于匹配访问gateway的请求(比如uri,查询参数、请求头),匹配则当前路由生效
- 对应GatewayPredicate的实现,实现类由工厂创建,工厂是RoutePredicateFactory的实现类,实现类命名规范:谓词name+RoutePredicateFactory,比如Path对应PathRoutePredicateFactory
- 谓词名称对应工厂实现类的类名前缀,谓词参数args对应工厂ConfigClass
- 多个谓词是且的关系
- 谓词不通过时,gateway返回404
Path
- 匹配路径,支持ant匹配和通过{}提取uriVariables
Query
- 是否有对应http请求参数名称,值可以正则。
- name固定Query,args有2个值,param和regexp,对应查询参数名称和值
- 只配名称时,表示只要有该请求参数则通过
Header
- HeaderRoutePredicateFactory
- 匹配请求头的名称和值,可以只配名称,实际请求头的值可能有多个,只要有一个匹配即可,配置值支持正则
Method
- 匹配HTTP请求方法,配置必须大写,逗号分割
RemoteAddr
- 匹配请求的客户端ip,准确的说是最后一个网络代理的ip,可以多个,逗号分割
Host
- 匹配Host请求头中主机部分的值(不包括端口),可以多个,逗号分割,可以ant匹配
- 采用AntPathMatcher匹配,且路径分割符是"."
Cookie
- 匹配Cookie的名称和值,值可以正则匹配
Weight
- 用于不同路由的负载均衡,同一分组的路由根据权重进行负载
- 可以配置2个值,逗号分割,分别是分组和权重
- WeightCalculatorWebFilter:启动时,根据Weight配置生成一个双层的Map,第一层是分组名称,第二层是路由id;请求到来时,生成一个0~1随机数,每个分组的选择一个路由ID
- WeightRoutePredicateFactory:谓词过滤时,根据分组和路由ID进行过滤
过滤器
- 配置写法和谓词相同,字符串写法:等号分割,第一部分对应过滤器工厂GatewayFilterFactory类名前缀,第二部分是参数
- 过滤器用于修改请求和响应
AddRequestHeader
- 添加请求头,后端可以获取到
- 请求头的值支持从uriVariables中动态获取
StripPrefix
- 只有一个整数值n,将请求的路径按"/"分割后,去除前缀n个
限流
跨域
spring.cloud.gateway.globalcors:cors-configurations:'[/**]': #跨域的uriPatternallowedHeaders: "*"allowedOrigins: "*"allowedMethods:- POST- OPTIONS- GET
- 服务端通过请求头Origin和请求url的scheme、host、port是否相同来判断是否为跨域请求,只要有一个不同则为跨域请求
- 必须有跨域配置,并且请求的uri和跨域配置的uriPattern匹配,网关才会判断是否跨域,如果跨域,通过跨域配置中允许跨域的请求头、来源、请求方法和实际请求的请求头、来源、请求方法是否匹配,如果都匹配,则运行跨域访问,否则返回403Forbiden
- org.springframework.web.reactive.handler.AbstractHandlerMapping#getHandler
- org.springframework.web.cors.reactive.DefaultCorsProcessor#process
自动生成路由
- 支持通过服务发现获取服务ID,自动根据服务ID生成路由配置。默认的路由配置的uri是lb://serviceId,谓词是/serviceId/**,过滤器是Rewritepath将serviceId去掉
全局过滤器
ReactiveLoadBalancerClientFilter
- 处理带lb scheme的路由URI,先通过ServiceInstanceListSupplier根据服务名称获取服务实例,再通过ReactorLoadBalancer实例负载均衡
RouteToRequestUrlFilter
- 做2件事情:1、支持2层scheme,将外层scheme保存到GATEWAY_SCHEME_PREFIX_ATTR,然后去除。2、使用内层sheme、host、port替换实际请求的uri,从而实现转发
相关文章:
SpringCloudGateway
作用 统一管理,易于监控安全,限流:在网关层就过滤掉非法信息nginx外部网关,gateway内网nginx可以使用Lua或Kong来增强 概念 id:名称随意uri: 被代理的服务地址。id和uri必填,谓词和过滤器非必填谓词:可以…...
Wireshark 对 https 请求抓包并展示为明文
文章目录 1、目标2、环境准备3、Wireshark 基本使用4、操作步骤4.1、彻底关闭 Chrome 进程4.2、配置 SSLKEYLOGFILE [核心步骤]4.3、把文件路径配置到 Wireshark 指定位置4.4、在浏览器发起请求4.5、抓包配置4.6、过滤4.6.1、过滤域名 http.host contains "baidu.com4.6.2…...
如何在Ubuntu环境下使用加速器配置Docker环境
一、安装并打开加速器 这个要根据每个加速器的情况来安装并打开,一般是会开放一个代理端口,比如1087 二、安装Docker https://docs.docker.com/engine/install/debian/#install-using-the-convenience-script 三、配置Docker使用加速器 3.1 修改配置…...
2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片
2.5 C#视觉程序开发实例1----CamManager实现模拟相机采集图片 1 目标效果视频 CamManager 2 CamManager读取本地文件时序 3 BD_Vision_Utility添加代码 3.0 导入链接库 BD_OperatorSets.dllSystem.Windows.Forms.dllOpencvSharp 3.1 导入VisionParam中创建的文件Util_FileO…...
算法简介:什么是算法?——定义、历史与应用详解
引言 在现代计算机科学中,算法是一个核心概念。无论是编程还是数据分析,算法都扮演着至关重要的角色。在这篇博客中,我们将深入探讨算法的定义、历史背景以及它在计算机科学中的地位和实际应用。 什么是算法? 算法是解决特定问题…...
xss攻击
一、xss攻击简介 1、OWASP TOP 10之一,XSS被称为跨站脚本攻击(Cross-site-scripting)2、主要基于java script(JS)完成恶意攻击行为。JS可以非常灵活的操作html、css和浏览器,这使得XSS攻击的“想象”空间特别大。3、XSS通过将精心构造代码(JS)代码注入到网页中,并由…...
Android 性能优化之布局优化
文章目录 Android 性能优化之布局优化绘制原理双缓冲机制布局加载原理检测耗时常规方式AOP方式获取控件加载耗时 布局优化AsyncLayoutInflater方案Compose方案减少布局层级和复杂度避免过度绘制 Android 性能优化之布局优化 绘制原理 CPU:负责执行应用层的measure…...
TCP 握手数据流
这张图详细描述了 TCP 握手过程中,从客户端发送 SYN 包到服务器最终建立连接的整个数据流转过程,包括网卡、内核、进程中的各个环节。下面对每个步骤进行详细解释: 客户端到服务器的初始连接请求 客户端发送 SYN 包: 客户端发起…...
MDA协议
MDA协议通常指消息摘要算法(Message Digest Algorithm),在计算机安全和密码学中被广泛用于数据完整性验证和认证。以下是对MDA协议的详细介绍: 1. 概述 MDA协议是一类哈希函数,用于生成固定长度的消息摘要或哈希值。…...
always块敏感列表的相关报错,
在综合的时候,报错如下 Synthesis synth_1 [Synth 8-91] ambiguous clock in event control ["E:/FPGA/FPGA_project/handwrite_fft/handwrite_fft.srcs/sources_1/new/reg_s2p.v":140] 猜测报错原因(暂时没有时间寻找原因,后续在…...
STM32空闲中断处理串口接受数据
1、检测到空闲线路中断也叫做空闲中断,意思是串口接收完1字节数据后,数据先保持高电平(空闲)的时间超过1字节数据所用的时间,则被判定为空闲中断。 2、HAL库中操作空闲中断的宏是 (1)_HAL_UAR…...
oak相机使用oak官网方式标定
目录 一、depthai ROS驱动 一、depthai ROS驱动 (1)驱动下载地址:2. C 开发快速上手 — DepthAI Docs 0.3.0.0 documentation sudo apt install ./depthai_2.17.1_arm64.deb //运行 Python3 utilities/cam_test.py -mres 400 -cams rgb,m …...
打造高效能“园区企业服务平台”,让企业更好更快发展!
近年来,随着我国经济的快速发展,各地产业园区建设如火如荼,成为区域经济的支柱,如果说园区是区域经济的支柱,企业则是园区的血液,给园区带来生命力,为园区发展提供着动力,各地政府…...
【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)
目录: 目录: 一、什么是openssl? 二、所需要具备的开发工具 三、Windows上编译OpenSSL3.0 四、Linux编译openssl3.0 一、什么是openssl? OpenSSL 是一个开源的软件库,它提供了一系列加密工具和协议,主要用…...
前端时间格式传入后端负载里面没有东西
我是因为没有将时间值格式化,所有负载没有东西 <el-col :md"6"><el-form-item label"创建时间" prop"createTime"><el-date-picker v-model"queryParams.createTime" type"date" change"ha…...
BUCK电源芯片,电气参数,极限参数,工作特性,引脚功能
概述 在应用DC-DC开关电源芯片时,通常需要关注以下参数,同步与非同步,输入电压,输入电流,输出电压,输出电流,输入输出电容的选择;mosfet选型,电感选型,功耗&a…...
学习小记-使用Redis的令牌桶算法实现分布式限流
在介绍令牌桶算法前先介绍一下漏桶算法(Leaky Bucket) 漏桶算法(Leaky Bucket) 漏桶算法是一种固定容量的容器模型,它通过控制数据流入和流出的速度来限制数据的传输速率。漏桶算法的主要特点包括: 固定…...
electron + express 实现 vue 项目客户端部署
写在前面 作为一个前端程序员,如何实现从前端到客户端的跨越,可能是一个很难实现的事。但客户需求千奇百怪,偶尔遇到一个非要客户端的,如何应对? 那Electron可能真是你福音。具体它有哪些功能,可自行官网…...
千万慎投!自引率高达93%!这16本On hold正处于高危状态,无法检索,剔除岌岌可危中!近四年镇压期刊“出狱”情况一览
本周投稿推荐 SCI • 能源科学类,1.5-2.0(25天来稿即录) • CCF推荐,4.5-5.0(2天见刊) • 生物医学制药类(2天逢投必中) EI • 各领域沾边均可(2天录用)…...
【数据结构】排序——快速排序
前言 本篇博客我们继续介绍一种排序——快速排序,让我们看看快速排序是怎么实现的 💓 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见📝 🎉欢迎大家点赞👍收藏⭐文章 目录 …...
告别WinForm!用C#和MetroFramework快速搭建现代化工控上位机UI(附完整源码)
用C#和MetroFramework打造现代化工控上位机界面的实战指南 在工业自动化领域,上位机软件的用户体验往往被忽视。许多工程师仍然在使用传统的WinForm开发界面,这些界面虽然功能完备,但视觉效果和交互体验已经远远落后于现代软件的标准。本文将…...
从Qt Creator到你的软件:如何用QDockWidget打造专业级可停靠面板(实战避坑)
从Qt Creator到你的软件:如何用QDockWidget打造专业级可停靠面板(实战避坑) 在开发桌面应用程序时,一个直观、灵活的用户界面往往能极大提升用户体验。许多专业级IDE如Qt Creator和VS Code都采用了可停靠面板的设计,允…...
3分钟掌握NCM音乐解密:ncmdump工具让你的音乐随处播放
3分钟掌握NCM音乐解密:ncmdump工具让你的音乐随处播放 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经下载了网易云音乐的NCM格式歌曲,却发现无法在其他设备上播放?这种专有加密格式虽然…...
从EfficientNetV1到V2:我是如何用PyTorch复现Fused-MBConv模块并验证其速度优势的
从EfficientNetV1到V2:我是如何用PyTorch复现Fused-MBConv模块并验证其速度优势的 去年在优化移动端图像分类模型时,我偶然发现EfficientNetV2论文中提到的Fused-MBConv模块在浅层网络中的推理速度比传统MBConv快30%以上。这个数字让我既兴奋又怀疑——毕…...
初探Taotoken模型广场如何帮助开发者快速选型与切换模型
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初探Taotoken模型广场如何帮助开发者快速选型与切换模型 当开发者开始一个新的大模型应用项目时,面对市场上众多的模型…...
手把手教你用SWM34SRET6驱动4.3寸TFT屏:从LVGL图片加载到SDRAM缓存的完整流程
手把手教你用SWM34SRET6驱动4.3寸TFT屏:从LVGL图片加载到SDRAM缓存的完整流程 在嵌入式开发中,实现高性能的图形界面显示往往需要处理复杂的硬件资源分配和软件架构设计。SWM34SRET6作为一款内置8MB SDRAM的Cortex-M33微控制器,为TFT-LCD驱动…...
使用Taotoken后我们如何清晰观测各模型的用量与延迟表现
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 使用Taotoken后我们如何清晰观测各模型的用量与延迟表现 当团队在项目中同时接入多个大语言模型时,一个常见的困扰随之…...
OpenClaw 上下文瘦身:3 个实验
这篇不是讲“提示词怎么写得更优雅”。我只看一个更硬的问题:Agent 跑久以后,上下文到底是怎么胖起来的,哪一刀最值得先砍。实验脚本和结果都放在本地目录里,可以复跑。你大概见过这种故障: Agent 前 10 分钟很听话&am…...
10倍效率提升!词达人自动化助手:告别枯燥词汇练习的终极解决方案
10倍效率提升!词达人自动化助手:告别枯燥词汇练习的终极解决方案 【免费下载链接】cdr 微信词达人,高正确率,高效简洁。支持班级任务及自选任务 项目地址: https://gitcode.com/gh_mirrors/cd/cdr 你是否厌倦了每周在词达人…...
CodeWF Toolbox:一个用 Avalonia + Prism 做出来的开发者工具箱
今天这篇文章,站长来聊聊我自己开发的 CodeWF Toolbox,CodeWF 工具箱。熟悉我的朋友一般都叫我“站长”,因为我还有一个网站:CodeWF。这个工具箱也是围绕我平时写代码、维护网站、整理资料、排查问题时反复遇到的需求做出来的。它…...
