当前位置: 首页 > 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;收藏⭐文章 ​ 目录 …...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

微信小程序之bind和catch

这两个呢&#xff0c;都是绑定事件用的&#xff0c;具体使用有些小区别。 官方文档&#xff1a; 事件冒泡处理不同 bind&#xff1a;绑定的事件会向上冒泡&#xff0c;即触发当前组件的事件后&#xff0c;还会继续触发父组件的相同事件。例如&#xff0c;有一个子视图绑定了b…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径&#xff0c; 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解&#xff0c;但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后&#xff0c;通常在该文件中会出现以下配置&…...

Maven 概述、安装、配置、仓库、私服详解

目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)

名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?

FTP&#xff08;File Transfer Protocol&#xff09;本身是一个基于 TCP 的协议&#xff0c;理论上不会丢包。但 FTP 文件传输过程中仍可能出现文件不完整、丢失或损坏的情况&#xff0c;主要原因包括&#xff1a; ✅ 一、FTP传输可能“丢包”或文件不完整的原因 原因描述网络…...