当前位置: 首页 > news >正文

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

作用 统一管理&#xff0c;易于监控安全&#xff0c;限流&#xff1a;在网关层就过滤掉非法信息nginx外部网关&#xff0c;gateway内网nginx可以使用Lua或Kong来增强 概念 id:名称随意uri: 被代理的服务地址。id和uri必填&#xff0c;谓词和过滤器非必填谓词&#xff1a;可以…...

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环境

一、安装并打开加速器 这个要根据每个加速器的情况来安装并打开&#xff0c;一般是会开放一个代理端口&#xff0c;比如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…...

算法简介:什么是算法?——定义、历史与应用详解

引言 在现代计算机科学中&#xff0c;算法是一个核心概念。无论是编程还是数据分析&#xff0c;算法都扮演着至关重要的角色。在这篇博客中&#xff0c;我们将深入探讨算法的定义、历史背景以及它在计算机科学中的地位和实际应用。 什么是算法&#xff1f; 算法是解决特定问题…...

xss攻击

一、xss攻击简介 1、OWASP TOP 10之一,XSS被称为跨站脚本攻击(Cross-site-scripting)2、主要基于java script(JS)完成恶意攻击行为。JS可以非常灵活的操作html、css和浏览器,这使得XSS攻击的“想象”空间特别大。3、XSS通过将精心构造代码(JS)代码注入到网页中&#xff0c;并由…...

Android 性能优化之布局优化

文章目录 Android 性能优化之布局优化绘制原理双缓冲机制布局加载原理检测耗时常规方式AOP方式获取控件加载耗时 布局优化AsyncLayoutInflater方案Compose方案减少布局层级和复杂度避免过度绘制 Android 性能优化之布局优化 绘制原理 CPU&#xff1a;负责执行应用层的measure…...

TCP 握手数据流

这张图详细描述了 TCP 握手过程中&#xff0c;从客户端发送 SYN 包到服务器最终建立连接的整个数据流转过程&#xff0c;包括网卡、内核、进程中的各个环节。下面对每个步骤进行详细解释&#xff1a; 客户端到服务器的初始连接请求 客户端发送 SYN 包&#xff1a; 客户端发起…...

MDA协议

MDA协议通常指消息摘要算法&#xff08;Message Digest Algorithm&#xff09;&#xff0c;在计算机安全和密码学中被广泛用于数据完整性验证和认证。以下是对MDA协议的详细介绍&#xff1a; 1. 概述 MDA协议是一类哈希函数&#xff0c;用于生成固定长度的消息摘要或哈希值。…...

always块敏感列表的相关报错,

在综合的时候&#xff0c;报错如下 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] 猜测报错原因&#xff08;暂时没有时间寻找原因&#xff0c;后续在…...

STM32空闲中断处理串口接受数据

1、检测到空闲线路中断也叫做空闲中断&#xff0c;意思是串口接收完1字节数据后&#xff0c;数据先保持高电平&#xff08;空闲&#xff09;的时间超过1字节数据所用的时间&#xff0c;则被判定为空闲中断。 2、HAL库中操作空闲中断的宏是 &#xff08;1&#xff09;_HAL_UAR…...

oak相机使用oak官网方式标定

目录 一、depthai ROS驱动 一、depthai ROS驱动 &#xff08;1&#xff09;驱动下载地址&#xff1a;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 …...

打造高效能“园区企业服务平台”,让企业更好更快发展!

​近年来&#xff0c;随着我国经济的快速发展&#xff0c;各地产业园区建设如火如荼&#xff0c;成为区域经济的支柱&#xff0c;如果说园区是区域经济的支柱&#xff0c;企业则是园区的血液&#xff0c;给园区带来生命力&#xff0c;为园区发展提供着动力&#xff0c;各地政府…...

【常见开源库的二次开发】基于openssl的加密与解密——openssl认识与配置(一)

目录&#xff1a; 目录&#xff1a; 一、什么是openssl&#xff1f; 二、所需要具备的开发工具 三、Windows上编译OpenSSL3.0 四、Linux编译openssl3.0 一、什么是openssl&#xff1f; OpenSSL 是一个开源的软件库&#xff0c;它提供了一系列加密工具和协议&#xff0c;主要用…...

前端时间格式传入后端负载里面没有东西

我是因为没有将时间值格式化&#xff0c;所有负载没有东西 <el-col :md"6"><el-form-item label"创建时间" prop"createTime"><el-date-picker v-model"queryParams.createTime" type"date" change"ha…...

BUCK电源芯片,电气参数,极限参数,工作特性,引脚功能

概述 在应用DC-DC开关电源芯片时&#xff0c;通常需要关注以下参数&#xff0c;同步与非同步&#xff0c;输入电压&#xff0c;输入电流&#xff0c;输出电压&#xff0c;输出电流&#xff0c;输入输出电容的选择&#xff1b;mosfet选型&#xff0c;电感选型&#xff0c;功耗&a…...

学习小记-使用Redis的令牌桶算法实现分布式限流

在介绍令牌桶算法前先介绍一下漏桶算法&#xff08;Leaky Bucket&#xff09; 漏桶算法&#xff08;Leaky Bucket&#xff09; 漏桶算法是一种固定容量的容器模型&#xff0c;它通过控制数据流入和流出的速度来限制数据的传输速率。漏桶算法的主要特点包括&#xff1a; 固定…...

electron + express 实现 vue 项目客户端部署

写在前面 作为一个前端程序员&#xff0c;如何实现从前端到客户端的跨越&#xff0c;可能是一个很难实现的事。但客户需求千奇百怪&#xff0c;偶尔遇到一个非要客户端的&#xff0c;如何应对&#xff1f; 那Electron可能真是你福音。具体它有哪些功能&#xff0c;可自行官网…...

千万慎投!自引率高达93%!这16本On hold正处于高危状态,无法检索,剔除岌岌可危中!近四年镇压期刊“出狱”情况一览

本周投稿推荐 SCI • 能源科学类&#xff0c;1.5-2.0&#xff08;25天来稿即录&#xff09; • CCF推荐&#xff0c;4.5-5.0&#xff08;2天见刊&#xff09; • 生物医学制药类&#xff08;2天逢投必中&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09…...

【数据结构】排序——快速排序

前言 本篇博客我们继续介绍一种排序——快速排序&#xff0c;让我们看看快速排序是怎么实现的 &#x1f493; 个人主页&#xff1a;小张同学zkf ⏩ 文章专栏&#xff1a;数据结构 若有问题 评论区见&#x1f4dd; &#x1f389;欢迎大家点赞&#x1f44d;收藏⭐文章 ​ 目录 …...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

SciencePlots——绘制论文中的图片

文章目录 安装一、风格二、1 资源 安装 # 安装最新版 pip install githttps://github.com/garrettj403/SciencePlots.git# 安装稳定版 pip install SciencePlots一、风格 简单好用的深度学习论文绘图专用工具包–Science Plot 二、 1 资源 论文绘图神器来了&#xff1a;一行…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

多模态大语言模型arxiv论文略读(108)

CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题&#xff1a;CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者&#xff1a;Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...

什么?连接服务器也能可视化显示界面?:基于X11 Forwarding + CentOS + MobaXterm实战指南

文章目录 什么是X11?环境准备实战步骤1️⃣ 服务器端配置(CentOS)2️⃣ 客户端配置(MobaXterm)3️⃣ 验证X11 Forwarding4️⃣ 运行自定义GUI程序(Python示例)5️⃣ 成功效果![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/55aefaea8a9f477e86d065227851fe3d.pn…...