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

统一网关--gateway(仅供自己参考)

1、网关的概念:

2、网关的功能:

  (1):身份认证和权限校验

    (2):服务路由(具体的业务路由到具体的服务),负载均衡(多台服务的话,服务之间进行负载均衡)

(3):请求限流(不能超过服务承受的最大请求)

3、springcloud中网关实现的两种方式:

(1):zuul

(2):gateway

两个的优缺点:zuul是基于servlet实现的阻塞式编程,而gateway是基于spring5提供的webflux实现的响应式的编程。gateway的性能比较好,吞吐量比较好

二、

1、gateway的基本配置

2、路由断言工厂(Route Predicates Factory):

  + :我们配置文件中配置的路由字符串规则会被factory路由工厂读取,然后将这些字符串规则转为判断条件。当有请求进入,看这个请求是否符合这些条件。符合则向服务器转发, 不符合则返回404

三、路由过滤器(GatewayFilter)可以对进入网关的请求和微服务的响应做处理

1、局部路由过滤器:(在相应路由的微服务生效)

添加方式:

    gateway:routes:- id: user-service  #路由id,唯一即可#uri: http://loaclhost:8080  目标地址也可以是这样,但常用的是下方的uri: lb://user-server  #路径的目标地址,lb负载均衡。user-service是具体的服务名称predicates:- Path=/user/**- id: order-serviceuri: lb://order-serverpredicates:- Path=/order/**default-filters:- AddRequestHeader=truth,cc is awesome #全局default
#          filters:
#            - AddRequestHeader=truth,cc is awesome  #局部

2、默认路由过滤器:default-filters(所有的微服务都可以生效)

3、全局过滤器(GlobalFilter):在已经有了一个default-filter全局的情况下为什么还需要这个全局的呢?因为全局过滤器可以更好地实现逻辑的处理。default-filter是配置的情况,复杂逻辑难以实现,所以产生了全局过滤器。

package org.example.filter;import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.stereotype.Component;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
@Order(1)   //设置过滤器的等级,越小等级越高,负数也可以
public class AuthGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest();  //请求requestHttpHeaders headers = request.getHeaders();MultiValueMap<String, String> queryParams = request.getQueryParams(); //request中携带的参数String auth = queryParams.getFirst("auth"); //获取某一个参数if("admin".equals(auth))    //参数相等则继续到下一个过滤器{return chain.filter(exchange);  //放行}exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); //设置响应codereturn exchange.getResponse().setComplete();    //拦截返回}
}

4、过滤器的执行顺序,局部和默认过滤器的order值为1,如果下面有多个则依次增大。

如果全局和局部和默认过滤器的order值相等的话,则依次按照默认->局部->全局的执行顺序

五、Gateway的cors的跨域问题:

跨域:浏览器禁止请求的发起者与服务端发生跨域ajax请求,请求被浏览器拦截的问题

跨域出现的情况:

  1. 不同协议:比如从 http://example.com 请求 https://example.com

  2. 不同域名:从 http://example.com 请求 http://another-domain.com

  3. 不同端口:从 http://example.com:80 请求 http://example.com:8080

解决方案:CORS

spring:cloud:gateway:globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:'[/**]':  #拦截所有请求,所有请求都必须经过跨域allowedOrigins: # 允许哪些网站的跨域请求- "http://localhost:8090"- "http://www.leyou.com"allowedMethods: # 允许的跨域ajax的请求方式- "GET"- "POST"- "DELETE"- "PUT"- "OPTIONS"allowedHeaders: "*" # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期

相关文章:

统一网关--gateway(仅供自己参考)

1、网关的概念&#xff1a; 2、网关的功能&#xff1a; &#xff08;1&#xff09;&#xff1a;身份认证和权限校验 &#xff08;2&#xff09;&#xff1a;服务路由&#xff08;具体的业务路由到具体的服务&#xff09;&#xff0c;负载均衡&#xff08;多台服务的话&#xff…...

【Leetcode152】分割回文串(回溯 | 递归)

文章目录 一、题目二、思路三、代码 一、题目 二、思路 具体例子和步骤&#xff1a;假设 s "aab"&#xff0c;步骤如下&#xff1a; 初始状态&#xff1a; s "aab"path []res [] 第一层递归&#xff08;外层循环&#xff09;&#xff1a; path []检…...

基于BiGRU+Attention实现风力涡轮机发电量多变量时序预测(PyTorch版)

前言 系列专栏:【深度学习&#xff1a;算法项目实战】✨︎ 涉及医疗健康、财经金融、商业零售、食品饮料、运动健身、交通运输、环境科学、社交媒体以及文本和图像处理等诸多领域&#xff0c;讨论了各种复杂的深度神经网络思想&#xff0c;如卷积神经网络、循环神经网络、生成对…...

深入探究 Flask 的应用和请求上下文

目标 读完本文后&#xff0c;您应该能够解释&#xff1a; 什么是上下文哪些数据同时存储在应用程序和请求上下文中在 Flask 中处理请求时&#xff0c;处理应用程序和请求上下文所需的步骤如何使用应用程序和请求上下文的代理如何在视图函数中使用current_app和代理request什么…...

C++学习笔记(30)

二十三、随机数 在实际开发中&#xff0c;经常用到随机数&#xff0c;例如&#xff1a;纸牌的游戏洗牌和发牌、生成测试数据等。 函数原型&#xff1a; void srand(unsigned int seed); // 初始化随机数生成器&#xff08;播种子&#xff09;。 int rand(); // 获一个取随机数。…...

Rust GUI框架 tauri V2 项目创建

文章目录 Tauri 2.0创建应用文档移动应用开发 Android 前置要求移动应用开发 iOS 前置要求参考资料 Tauri 2.0 Tauri 是一个构建适用于所有主流桌面和移动平台的轻快二进制文件的框架。开发者们可以集成任何用于创建用户界面的可以被编译成 HTML、JavaScript 和 CSS 的前端框架…...

C++继承(上)

1.继承的概念 继承是一个类继承另外一个类&#xff0c;称继承的类为子类/派生类&#xff0c;被继承的类称为父类/基类。 比如下面两个类&#xff0c;Student和Person&#xff0c;Student称为子类&#xff0c;Person称为父类。 #include<iostream> using namespace std…...

在 Vim 中打开文件并快速查询某个字符

在 Vim 中打开文件并快速查询某个字符&#xff0c;可以按照以下步骤操作&#xff1a; 打开 Vim 并加载文件&#xff1a; vim your_file.txt将 your_file.txt 替换为你要查询的文件名。 进入普通模式&#xff08;如果你还在插入模式或其他模式下&#xff09;&#xff1a; Es…...

oracle 条件取反

在Oracle数据库中&#xff0c;条件取反主要通过逻辑运算符NOT来实现。NOT是一个单目运算符&#xff0c;用于对指定的条件表达式取反。当条件表达式为真&#xff08;True&#xff09;时&#xff0c;NOT运算符的结果就是假&#xff08;False&#xff09;&#xff1b;反之&#xf…...

力扣最热一百题——缺失的第一个正数

目录 题目链接&#xff1a;41. 缺失的第一个正数 - 力扣&#xff08;LeetCode&#xff09; 题目描述 示例 提示&#xff1a; 解法一&#xff1a;标记数组法 1. 将非正数和超出范围的数替换 2. 使用数组下标标记存在的数字 3. 找到第一个未标记的位置 4. 为什么时间复杂…...

零基础入门AI:一键本地运行各种开源大语言模型 - Ollama

什么是 Ollama&#xff1f; Ollama 是一个可以在本地部署和管理开源大语言模型的框架&#xff0c;由于它极大的简化了开源大语言模型的安装和配置细节&#xff0c;一经推出就广受好评&#xff0c;目前已在github上获得了46k star。 不管是著名的羊驼系列&#xff0c;还是最新…...

3.接口测试的基础/接口关联(Jmeter工具/场景一:我一个人负责所有的接口,项目规模不大)

一、Jmeter接口测试实战 1.场景一&#xff1a;我一个人负责所有的接口&#xff1a;项目规模不大 http:80 https:443 接口文档一般是开发给的&#xff0c;如果没有那就需要抓包。 请求默认值&#xff1a; 2.请求&#xff1a; 请求方式:get,post 请求路径 请求参数 查询字符串参数…...

【matlab】将程序打包为exe文件(matlab r2023a为例)

文章目录 一、安装运行时环境1.1 安装1.2 简介 二、打包三、打包文件为什么很大 一、安装运行时环境 使用 Application Compiler 来将程序打包为exe&#xff0c;相当于你使用C编译器把C语言编译成可执行程序。 在matlab菜单栏–App下面可以看到Application Compiler。 或者在…...

从底层原理上解释clickhouse查询为什么快

ClickHouse 是一个开源的列式数据库管理系统&#xff0c;以其极高的查询性能著称。为了理解 ClickHouse 查询为什么快&#xff0c;我们需要从以下几个方面进行深入探讨&#xff0c;包括其架构设计、存储引擎、索引结构、并行化策略以及内存管理等底层原理。 1. 列式存储&#…...

FEAD:fNIRS-EEG情感数据库(视频刺激)

摘要 本文提出了一种可用于训练情绪识别模型的fNIRS-EEG情感数据库——FEAD。研究共记录了37名被试的脑电活动和脑血流动力学反应&#xff0c;以及被试对24种情绪视听刺激的分类和维度评分。探讨了神经生理信号与主观评分之间的关系&#xff0c;并在前额叶皮层区域发现了显著的…...

标准库标头 <bit>(C++20)学习

<bit>头文件是数值库的一部分。定义用于访问、操作和处理各个位和位序列的函数。例如&#xff0c;有函数可以旋转位、查找连续集或已清除位的数量、查看某个数是否为 2 的整数幂、查找表示数字的最小位数等。 类型 endian (C20) 指示标量类型的端序 (枚举) 函数 bit_ca…...

redis群集三种模式:主从复制、哨兵、集群

redis群集有三种模式 redis群集有三种模式&#xff0c;分别是主从同步/复制、哨兵模式、Cluster&#xff0c;下面会讲解一下三种模式的工作方式&#xff0c;以及如何搭建cluster群集 ●主从复制&#xff1a;主从复制是高可用Redis的基础&#xff0c;哨兵和集群都是在主从复制…...

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算

操作环境&#xff1a; MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分&#xff1a;显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏&#xff08;Edit Text&#xff09;&#xff1a;位于界面顶部中央&#xff0c;用于显示用户输入的表达式和…...

基于yolov8的红外小目标无人机飞鸟检测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的红外小目标无人机与飞鸟检测系统是一项集成了前沿技术的创新解决方案。该系统利用YOLOv8深度学习模型的强大目标检测能力&#xff0c;结合红外成像技术&#xff0c;实现了对小型无人机和飞鸟等低空飞行目标的快速、准确检测。 YOLOv8作为YOLO系列的…...

网络封装分用

目录 1,交换机 2,IP 3,接口号 4,协议 分层协议的好处: 5,OSI七层网络模型. 6,TCP/IP五层网络模型(主流): [站在发送方视角] [接收方视角] 1,交换机 交换机和IP没有关系,相当于是对路由器接口的扩充,这时相当于主机都与路由器相连处于局域网中,把越来越多的路由器连接起…...

Pinyin-pro 3.15.1版本避坑指南:老项目兼容性问题解决方案

Pinyin-pro 3.15.1版本避坑指南&#xff1a;老项目兼容性问题解决方案 在技术迭代飞快的今天&#xff0c;前端开发者常常面临一个尴尬局面&#xff1a;新发布的工具库在功能上令人惊艳&#xff0c;却因为底层依赖或语法特性与老项目环境不兼容而无法直接使用。Pinyin-pro作为中…...

Altium Designer 实战指南:高效创建与优化PCB封装库

1. Altium Designer封装库基础入门 刚接触PCB设计时&#xff0c;我最头疼的就是封装库的创建。记得第一次画板子&#xff0c;因为电阻封装画错导致整批板子返工&#xff0c;那种挫败感至今难忘。现在用Altium Designer做封装就像搭积木一样简单&#xff0c;关键是要掌握正确的方…...

Phi-4-mini-reasoning快速上手:3步完成vLLM服务部署+Chainlit前端验证

Phi-4-mini-reasoning快速上手&#xff1a;3步完成vLLM服务部署Chainlit前端验证 1. 模型简介 Phi-4-mini-reasoning 是一个基于合成数据构建的轻量级开源模型&#xff0c;专注于高质量、密集推理的数据处理能力。作为Phi-4模型家族的一员&#xff0c;它经过专门微调以提升数…...

从v4l2-ctl命令到media拓扑:手把手教你调试RK3568上的OV8858摄像头图像

RK3568平台OV8858摄像头深度调试实战&#xff1a;从硬件链路到图像优化的全流程解析 当你在RK3568平台上调试OV8858摄像头时&#xff0c;是否遇到过这样的场景&#xff1a;设备树配置看似正确&#xff0c;但摄像头输出的图像却出现花屏、颜色异常或干脆没有信号&#xff1f;作为…...

立创·地阔星开发板开箱测评:除了点灯,STM32F103C8T6还能怎么玩?(附资源下载与避坑指南)

立创地阔星开发板深度探索&#xff1a;从开箱到创意项目实战 拆开快递包装的那一刻&#xff0c;这块蓝色PCB板安静地躺在防静电袋里——这就是最近在创客圈备受关注的立创地阔星开发板。作为一款基于STM32F103C8T6芯片的高性价比开发平台&#xff0c;它不仅适合初学者入门&…...

从线索到成交,陀螺匠帮我打通了客户管理全流程

作为一个从业多年销售&#xff0c;我觉得我在管理客户过程中遇到的这些问题&#xff0c;很多企业多多少少也出现过。比如销售小王跟了一个月的客户&#xff0c;最后发现小李早就联系过了&#xff0c;经常白忙活&#xff1b;好不容易谈成的单子&#xff0c;合同改来改去&#xf…...

Java中如何实现Excel跨工作表数据复制

本文介绍了如何在Java程序中有效地复制Excel工作表中的数据。许多Java开发人员需要将数据从一个工作表复制到另一个工作表。本文提供了一个代码示例来帮助您解决这个问题。核心是如何在Java中有效地复制Excel工作表中特定区域的数据。下面的例子是使用Java库&#xff08;具体的…...

OpCore-Simplify:三步解决黑苹果配置难题的零代码自动化工具

OpCore-Simplify&#xff1a;三步解决黑苹果配置难题的零代码自动化工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 问题诊断&#xff1a;黑苹果配…...

OpenRouter最新免费额度调整:如何用微信支付宝充值解锁1000次/天API调用

OpenRouter API调用新规解析&#xff1a;微信支付宝充值实战指南 最近OpenRouter平台对免费API调用额度进行了重要调整&#xff0c;这一变化直接影响着国内开发者和AI爱好者的日常使用体验。作为聚合了300多个主流AI模型的统一接口平台&#xff0c;OpenRouter一直以友好的免费政…...

如何用自然语言开发Godot游戏:3大突破性功能解析

如何用自然语言开发Godot游戏&#xff1a;3大突破性功能解析 【免费下载链接】Godot-MCP An MCP for Godot that lets you create and edit games in the Godot game engine with tools like Claude 项目地址: https://gitcode.com/gh_mirrors/god/Godot-MCP 你是否想过…...