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

微服务学习|Gateway网关:网关作用、快速入门、路由断言工厂、路由过滤器配置、全局过滤器、过滤器执行顺序、跨域问题处理

为什么需要网关

网关功能:

1.身份认证和权限校验

2.服务路由、负载均衡

3.请求限流

网关的技术实现

在SpringCloud中网关的实现包括两种:gateway、zuul

Zuul是基于Servlet的实现,属于阻塞式编程。而SprinaCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能。

搭建网关服务

搭建网关服务的步骤:

1.创建新的module,引入SpringCloudGateway的依赖和nacos的服务发现依赖

2.编写路由配置及nacos地址

3.访问相关接口,端口为网关设置端口,发现都可以调用,网关设置成功

路由断言工厂Route Predicate Factory

我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件

例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handlerpredicate.PathRoutePredicateFactory类来处理的

像这样的断言工厂在SpringCloudGateway还有十几个

Spring提供了11种基本的Predicate工厂:

使用After,访问orderservice微服务的请求,2031年后的请求才可以通过

调用orderservice微服务的接口,发现访问不了了已经

改成Before,也就是2031年以前的请求就可以通过

成功访问

PredicateFactory的作用是什么?

读取用户定义的断言条件,对请求做出判断

Path=/user/**是什么含义?

路径是以/user开头的就认为是符合的

路由过滤器 GatewayFilter

GatewayFilter是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理

过滤器工厂 GatewayFilterFactory

Spring提供了31种不同的路由过滤器工厂。例如:

案例:给所有进入userservice的请求添加一个请求头

给所有进入userservice的请求添加一个请求头: Truth=itcastis freaking awesome!

实现方式:在gateway中修改application.yml文件,给userservice的路由添加过滤器

在userservice的一个方法中加入获取到请求头的一个参数,并将该参数打印

调用该接口,发现在控制台中成功打印出参数,说明请求头中确实加入了我们设置的信息

默认过滤器

如果要对所有的路由都生效,则可以将过滤器工厂写到default下。格式如下

过滤器的作用是什么?

对路由的请求或响应做加工处理,比如添加请求头

配置在路由下的过滤器只对当前路由的请求生效

defaultFilters的作用是什么?

对所有路由都生效的过滤器

全局过滤器 GlobalFilter

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样区别在于GatewayFilter通过配置定义,处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。定义方式是实现GlobalFilter接口。

案例:定义全局过滤器,拦截并判断用户身份

需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

 参数中是否有authorization

authorization参数值是否为admin

如果同时满足则放行,否则拦截

调用该接口并携带响应参数,发现可以调用

参数携带错误,发现调用不了

全局过滤器的作用是什么?

对所有路由都生效的过滤器,并且可以自定义处理逻辑

实现全局过滤器的步骤?

实现GlobalFilter接口

添加@Order注解或实现Ordered接口

编写处理逻辑

过滤器执行顺序

请求进入网关会碰到三类过滤器: 当前路由的过滤器、DefaultFilter、GlobalFilter

请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器

每一个过滤器都必须指定一个int类型的order值,order值越小,优先级越高,执行顺序越靠前

GlobalFilter通过实现Ordered接口,或者添加@Order注解来指定order值,由我们自己指定

路由过滤器和defaultFilter的order由Spring指定,默认是按照声明顺序从1递增

当过滤器的order值一样时,会按照 defaultFilter >路由过滤器>GlobalFilter的顺序执行

路由过滤器、defaultFilter、全局过滤器的执行顺序?

 order值越小,优先级越高

当order值一样时,顺序是defaultFilter最先,然后是局部的路由过滤器,最后是全局过滤器

相关文章:

微服务学习|Gateway网关:网关作用、快速入门、路由断言工厂、路由过滤器配置、全局过滤器、过滤器执行顺序、跨域问题处理

为什么需要网关 网关功能: 1.身份认证和权限校验 2.服务路由、负载均衡 3.请求限流 网关的技术实现 在SpringCloud中网关的实现包括两种:gateway、zuul Zuul是基于Servlet的实现,属于阻塞式编程。而SprinaCloudGateway则是基于Spring5中提供的WebFlux&#xf…...

七、通过libfdk_aac编解码器实现aac音频和pcm的编解码

前言 测试环境: ffmpeg的4.3.2自行编译版本windows环境qt5.12 AAC编码是MP3格式的后继产品,通常在相同的比特率下可以获得比MP3更高的声音质量,是iPhone、iPod、iPad、iTunes的标准音频格式。 AAC相较于MP3的改进包含: 更多的采…...

spring 是如何开启事务的, 核心原理是什么

文章目录 spring 是如何开启事务的核心原理1 基于注解开启事务2 基于代码来开启事务 spring 是如何开启事务的 核心原理 Spring事务管理的实现有许多细节,如果对整个接口框架有个大体了解会非常有利于我们理解事务,下面通过讲解Spring的事务接口来了解…...

头歌——操作系统实训总结

死锁 1、系统出现死锁时一定同时保持了四个必要条件,对资源采用按序分配算法后可破坏的条件是(A)。 A、循环等待条件B、互斥条件C、占有并等待条件D、不可抢占条件 2、资源的静态分配算法在解决死锁问题中是用于(B)。 …...

Django自动生成docs接口文档

1.创建Django项目 python manage.py startproject django20252.创建子应用 python manage.py startapp api3.安装依赖包 pip install coreapi4.创建urls.py from django.contrib import admin from django.urls import path, include from rest_framework import routers f…...

Mock 数据

1. Mock 数据的方式 2. json-server 实现 Mock 数据 项目中安装json-server npm i -D json-server准备一个json文件添加启动命令 //package.json"scripts": {"start": "craco start","build": "craco build","test&q…...

(三)C语言之for语句概述

&#xff08;三&#xff09;C语言之for语句概述 一、使用for语句实现打印华氏温度与摄氏温度转换二、for语句概述三、练习 一、使用for语句实现打印华氏温度与摄氏温度转换 #include <stdio.h> /*当华氏温度为 0,20,40,...300时&#xff0c;打印出华氏温度与摄氏温度对照…...

OpenLDAP配置web管理界面PhpLDAPAdmin服务-centos9stream

之前已经发了一篇关于centos9下面配置openldap多主高可用集群的内容&#xff0c;不会配置ldap集群的请参考&#xff1a;服务器集群配置LDAP统一认证高可用集群&#xff08;配置tsl安全链接&#xff09;-centos9stream-openldap2.6.2-CSDN博客 这里跟着前篇文章详细说明如何配置…...

深兰科技多款大模型技术产品登上新闻联播!

11月20日晚&#xff0c;新闻联播报道了2023中国5G工业互联网大会&#xff0c;深兰科技metamind、汉境大型城市智能体空间等大模型技术和产品在众多参展产品中脱颖而出&#xff0c;被重点播报。 2023中国5G工业互联网大会 本届大会由工信部和湖北省人民政府联合主办&#xff0c;…...

移远通信推出六款新型天线,为物联网客户带来更丰富的产品选择

近日&#xff0c;移远通信重磅推出六款新型天线&#xff0c;覆盖5G、非地面网络&#xff08;NTN&#xff09;等多种新技术&#xff0c;将为物联网终端等产品带来全新功能和更强大的连接性能。 移远通信COO张栋表示&#xff1a;“当前&#xff0c;物联网应用除了需要高性能的天线…...

八、ffmpeg录制视频为yuv文件

前言 测试环境&#xff1a; ffmpeg的4.3.2自行编译版本windows环境qt5.12 图片的一些重要知识&#xff1a; RGB图片 位深度&#xff1a;每一个像素都会使用n个二进制位来存储颜色信息。每一个像素的颜色都是由红&#xff08;Red&#xff09;、绿&#xff08;Green&#xff0…...

Rust并发编程:理解线程与并发

大家好&#xff01;我是lincyang。 今天我们来深入探讨Rust中的并发编程&#xff0c;特别是线程的使用和并发的基本概念。 Rust中的线程 Rust使用线程来实现并发。线程是操作系统可以同时运行的最小指令集。在Rust中&#xff0c;创建线程非常简单&#xff0c;但与此同时&…...

二次开发问题汇总【C#】

1未将对象引用到实例。 接口函数的参数不对。解决办法【用fixed去限制数组长度】 unsafe public struct VCI_BOARD_INFO {public UInt16 hw_Version;public UInt16 fw_Version;public UInt16 dr_Version;public UInt16 in_Version;public UInt16 irq_Num;public byte can_Num;…...

中职组网络安全B模块-渗透提权2

任务五:渗透提权2 任务环境说明: 仅能获取xxx的IP地址 用户名:test,密码:...

【考研】数据结构(更新到循环链表)

声明&#xff1a;所有代码都可以运行&#xff0c;可以直接粘贴运行&#xff08;只有库函数没有声明&#xff09; 线性表的定义和基本操作 基本操作 定义 静态&#xff1a; #include<stdio.h> #include<stdlib.h>#define MaxSize 10//静态 typedef struct{int d…...

DB2—03(DB2中常见基础操作)

DB2—03&#xff08;DB2中常见基础操作&#xff09; 1. 前言1.1 oracle和mysql相关 2. db2中的"dual"2.1 SYSIBM.SYSDUMMY12.2 使用VALUES2.3 SYSIBM.SYSDUMMY1 "变" dual 3. db2中常用函数3.1 nvl()、value()、COALESCE()3.2 NULLIF() 函数3.3 LISTAGG() …...

华为云cce健康检查有什么用?配置需要注意什么?

华为云cce健康检查 如上图&#xff0c;华为云健康检查可用来探测cce的实例运行状态&#xff0c;必要时cce会自动重启实例&#xff0c;达到cce持续服务。 但是配置时需要注意一下几个方面&#xff0c;否则cce的状态总是有些不正常。 1、http探查比较友好。因为我们的在cce里面…...

微信小程序会议OA-登录获取手机号流程登录-小程序导入微信小程序SDK(从微信小程序和会议OA登录获取手机号到登录小程序导入微信小程序SDK)

目录 获取用户昵称头像和昵称 wx.getUserProfile bindgetuserinfo 登录过程 登录-小程序 wx.checkSession wx.login wx.request 后台 准备数据表 反向生成工具生成 准备封装前端传过来的数据 小程序服器配置 导入微信小程序SDK application.yml WxProperties …...

原来 TinyVue 组件库跨框架(Vue2、Vue3、React、Solid)是这样实现的?

本文由 TinyVue 组件库核心成员郑志超分享&#xff0c;首先分享了实现跨框架组件库的必要性&#xff0c;同时通过演示Demo和实际操作向我们介绍了如何实现一个跨框架的组件库。 前言 前端组件库跨框架是什么&#xff1f; 前端组件库跨框架是指在不同的前端框架&#xff08;如…...

自定义label组件

自定义label组件 支持边框绘制 支持shape背景(按指定圆角裁剪,矩形,圆角矩,圆形),支持指定角圆角 支持自定义阴影(颜色,偏移,深度) 边框颜色支持状态选择器 预览 核心绘制辅助类 public class LabelHelper {private final Paint paint;private Paint shadowPaint;private fina…...

VS Code Copilot Next 工作流配置不是“开箱即用”,而是“开箱即崩”?揭露GitHub Copilot Teams v2.12.0+中3个高危默认配置项及紧急热修复补丁

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VS Code Copilot Next 自动化工作流配置不是“开箱即用”&#xff0c;而是“开箱即崩”&#xff1f; VS Code Copilot Next&#xff08;v1.12&#xff09;在启用自动化工作流&#xff08;如 copilot:ru…...

用LVGL v8.3设计一个简洁的状态栏:从布局对齐到响应式适配的完整实践

用LVGL v8.3设计一个简洁的状态栏&#xff1a;从布局对齐到响应式适配的完整实践 在嵌入式UI开发中&#xff0c;状态栏作为用户界面的"信息中枢"&#xff0c;既要保证关键信息的清晰展示&#xff0c;又要适应不同屏幕尺寸的变化。LVGL v8.3作为轻量级图形库的佼佼者&…...

Unity着色器编译核心指令与优化技巧详解

1. Unity着色器编译基础与核心指令解析在Unity游戏开发中&#xff0c;着色器是图形渲染管线的核心组件&#xff0c;负责将3D几何数据转换为屏幕上的2D像素。Unity支持多种着色器语言&#xff0c;其中CG/HLSL是最常用的选择。让我们深入探讨着色器编译的核心机制和优化技巧。1.1…...

QVAC Genesis II:教育领域LLM预训练的高质量合成数据集

1. 项目概述 QVAC Genesis II是一个专注于为大型语言模型(LLM)预训练提供高质量多领域教育合成数据集的扩展项目。作为原始QVAC Genesis数据集的升级版本&#xff0c;它目前保持着同类型数据集中规模最大、质量最高的记录。这个项目特别针对教育领域的LLM训练需求&#xff0c;通…...

GPFS 集群运维「神器」:手搓一个 EC 模式可视化监控平台,实现自动化飞书告警!

01 存储运维的「黑盒」之痛 做过大规模 GPFS&#xff08;IBM Spectrum Scale&#xff09;集群运维的同学都懂&#xff1a; 集群拓扑全靠 mmlscluster、mmlsnsd 命令脑补&#xff1b;EC&#xff08;Erasure Coding&#xff0c;纠删码&#xff09;模式的磁盘、Vdisk、Pdisk 关系错…...

Python高级应用系列(十八)网络编程:socket、http协议与Web框架原理

前言 网络编程是 Python 后端开发的基石。无论你是构建 HTTP API、开发实时通信系统,还是调试网络协议,理解 socket 层的工作原理都至关重要。很多开发者每天使用 requests、Flask、Django,却从未真正理解 HTTP 的底层机制和 Web 框架的请求处理流程。 本文从 socket 起步…...

SpringBoot项目整合Minio存储,从配置到实战上传下载(附完整代码)

SpringBoot项目整合Minio存储&#xff1a;工程化实践与深度优化 在当今云原生应用开发中&#xff0c;对象存储已成为处理非结构化数据的标准方案。Minio作为一款高性能的开源对象存储服务&#xff0c;以其轻量级、兼容S3协议的特性&#xff0c;成为许多Java开发者替代商业云存储…...

全球领先制造企业(如汽车、航空航天)Windchill许可证管理最佳实践

风云突变&#xff01;Windchill许可证一用就爆&#xff0c;怎地破&#xff1f;我刚从一个汽车零部件厂回来&#xff0c;那帮人开完会后集体抱怨&#xff1a;“又抢不折腾到Windchill许可了&#xff01;”项目急着出图&#xff0c;偏偏授权全被占用。可也是&#xff0c;更让我惊…...

OpenBMB/IoA框架:构建多智能体协作系统的核心原理与工程实践

1. 项目概述&#xff1a;当大模型学会“开会”&#xff0c;一场关于智能协作的范式革命 最近在折腾大模型应用落地的朋友&#xff0c;可能都遇到过这样一个头疼的问题&#xff1a;单个模型能力再强&#xff0c;面对复杂任务时也常常力不从心。比如&#xff0c;你需要它帮你写一…...

从零开始打造OS性能监控:基于os-tutorial的计时器与中断完全指南

从零开始打造OS性能监控&#xff1a;基于os-tutorial的计时器与中断完全指南 【免费下载链接】os-tutorial How to create an OS from scratch 项目地址: https://gitcode.com/gh_mirrors/os/os-tutorial os-tutorial是一个从零开始构建操作系统的开源项目&#xff0c;它…...