SpringCloud中网关-详解、案例(代码)

简介:在Spring Cloud中,网关的角色是非常重要的,它负责整个系统的入口流量,并且可以处理路由、过滤、协议转换等操作

目录

1、网关的技术实现

1.1 网关功能

1.2 网关的形式

2、网关实现步骤

2.1 添加相关依赖

2.2 创建此module的main()方法,用来启动此服务

3、路由过滤器

3.1 路由断言工厂

4.1 路由过滤工厂

4.2 全局过滤器

4.3 跨域问题处理

4、总结


1、网关的技术实现

1.1 网关功能

图 1.1-1 网关功能

上图中展示的便是网关的作用:

  • 身份认证和权限校验:对不同的登录用户校验身份,确定有那些访问权限
  • 服务路由、负载均衡:确定登录的用户访问那些服务,从而调用空闲的服务
  • 请求限流:当访问量过多,就限制用户登录或者让用户等待

1.2 网关的形式

图 1.2-1 网关的两种形式

2、网关实现步骤

2.1 添加相关依赖

图 2.1-1 添加相关依赖

上图中展示的是搭建网关的第一步:

  • 在项目中创建一个新的模块
  • 在新模块pom文件中添加依赖

2.2 创建此module的main()方法,用来启动此服务

图 2.2-1 创建此module的main()方法
上图中展示的是在当前项目中创建一个 gateway 模块而且创建此模块的main()方法,用来启动此服务

3、路由过滤器

3.1 路由断言工厂

图 3.1-1 路由断言工厂
  • 我们在配置文件中写的断言规则只是字符串,这些字符串会被Predicate Factory读取并处理,转变为路由判断的条件
  • 例如Path=/user/**是按照路径匹配,这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory类来处理的
  • 像这样的断言工厂在SpringCloudGateway还有十几个

4.1 路由过滤工厂

图 4.1-1 路由过滤工厂

上图中展示的便是路由过滤工厂的常见过滤器

4.2 全局过滤器

package cn.itcast.gateway;import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpStatus;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.util.MultiValueMap;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;/*** 全局过滤器*/
public class AuthorizeFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求ServerHttpRequest request = exchange.getRequest();MultiValueMap<String, String> map = request.getQueryParams();// 2.获取authorization参数String authorizeFilter = map.getFirst("authorizeFilter");// 3.校验if ("admin".equals(authorizeFilter)){// 4.校验成功,放行Mono<Void> mono = chain.filter(exchange);return mono;}// 5.校验失败,结束处理exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);return exchange.getResponse().setComplete();}// 设置全局过滤器的执行顺序,数字越小越先执行@Overridepublic int getOrder() {return -1;}
}

4.3 跨域问题处理

图 4.3-1 跨域问题处理
上图展示的便是处理跨域问题的方法,即在网关微服务的配置文件中,添加如上对应配置(参数要根据开发情况做出调整)

4、总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/4128.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【算法刷题 | 贪心算法05】4.27(K次取反后最大化的数组和、加油站)

文章目录 8.K次取反后最大化的数组和8.1题目8.2解法&#xff1a;贪心8.2.1贪心思路8.2.2代码实现 9.加油站9.1题目9.2解法&#xff1a;贪心9.2.1贪心思路9.2.2代码实现 8.K次取反后最大化的数组和 8.1题目 给你一个整数数组 nums 和一个整数 k &#xff0c;按以下方法修改该数…

【深度学习-番外1】Win10系统搭建VSCode+Anaconda+Pytorch+CUDA深度学习环境和框架全过程

专栏的老读者们都知道&#xff0c;以前的文章以使用MATLAB的为多。 不过后续陆续开始展开深度学习算法的应用&#xff0c;就会逐渐引入Python语言了&#xff08;当然MATLAB的代码也会同步更新&#xff09;&#xff0c;这是由于在深度学习领域&#xff0c;Python应用更为广泛。…

6.比较含退格的字符串(力扣字符串)(两种解法:字符串操作,栈)

目录 题目链接 法一&#xff1a;普通字符串操作 法二&#xff1a;栈操作 题目链接 . - 力扣&#xff08;LeetCode&#xff09; 法一&#xff1a;普通字符串操作 用len1记录目前s的字符个数&#xff0c;len2记录目前t的字符个数 如果不是#&#xff0c;则s[len1] s[i] 如果是…

解决Android Studio安卓开发写入文件问题

有很多小伙伴想把文件写进安卓系统储存失败&#xff0c;类似下面的代码 val file File("account.txt")val writer BufferedWriter(FileWriter(file))writer.use {it.write(username "," password)} 用java方式写入读出文件但是显示成功但是找不到文件…

Linux--自主编写shell

目录 准备知识 shell原理 shell与用户互动的过程 实现shell 0.用到的头文件和宏定义 1.首先我们需要自己输出一个命令行 2.获取用户命令行字符 3.命令行字符串分割 4.执行命令 5.设置循环 6.检测内建命令 7.完善细节--获取工作目录而非路径 准备知识 Linux--环境…

Linux系统安全与应用【二】

目录 1.开关机安全控制 1.2 实例&#xff1a;GRUB 菜单设置密码 2.终端登录安全控制 2.1 限制root只在安全终端登录 ​3.弱口令检测 3.1 Joth the Ripper,JR​编辑 4.网络端口扫描 4.1 nmap命令 1.开关机安全控制 1.1 GRUB限制 限制更改GRUB引导参数 通常情况下在系统…

类和对象【三】析构函数和拷贝构造函数

文章目录 析构函数析构函数的定义析构函数的作用主要作用次要作用 析构函数的特点 拷贝构造函数拷贝构造函数的定义拷贝构造函数的作用主要作用次要作用 拷贝构造函数的特点浅拷贝和深拷贝浅拷贝深拷贝 拷贝构造函数的调用场景 析构函数 析构函数的定义 析构函数(destructor) …

mybatis基本使用

文章目录 1. mybatis2. 基本使用(1) maven坐标(2) 配置文件编写(3) 数据库操作(4) 注解查询 2. 基本配置(1) 读取外部配置文件(2) mapper映射 3. 映射文件查询删除/修改/新增 动态sql 1. mybatis MyBatis 是一款优秀的持久层框架&#xff0c;它支持自定义 SQL、存储过程以及高…

使用 Gradio 的“热重载”模式快速开发 AI 应用

在这篇文章中&#xff0c;我将展示如何利用 Gradio 的热重载模式快速构建一个功能齐全的 AI 应用。但在进入正题之前&#xff0c;让我们先了解一下什么是重载模式以及 Gradio 为什么要采用自定义的自动重载逻辑。如果你已熟悉 Gradio 并急于开始构建&#xff0c;请直接跳转到第…

记录些RAG中Chunk切分方法

非结构化数据 在处理非结构化数据时&#xff0c;文本切分策略的选择至关重要&#xff0c;以保持信息完整性和提高检索效率。以下是一些有效的切分方法&#xff1a; 固定长度切分&#xff1a;将文本按照固定的字数或词数进行切分&#xff0c;例如每个文档切分成300个字或300个…

【Camera KMD ISP SubSystem笔记】Request 流转与Bubble机制

ISP中断类型 SOF: 一帧图像数据开始传输 EOF: 一帧图像数据传输完成 REG_UPDATE: ISP寄存器更新完成(每个reg group都有独立的这个中断) EPOCH: ISP某一行结尾(默认20)就会产生此中断 BUFFER DONE: 一帧图像数据ISP完全写到DDR了 管理Isp request的几个List st…

代码随想录:二叉树22-24

目录 700.二叉搜索树的搜索 题目 代码&#xff08;二叉搜索树迭代&#xff09; 代码&#xff08;二叉搜索树递归&#xff09; 代码&#xff08;普通二叉树递归&#xff09; 代码&#xff08;普通二叉树迭代&#xff09; 98.验证二叉搜索树 题目 代码&#xff08;中序递…

oracle rman restore database的时候报错RMAN-06023: 没有找到数据文件1的副本来还原

一 问题描述 在oracle异地备份恢复测试数据库上执行restore database的时候报错&#xff1a; RMAN-06023: 没有找到数据文件1的副本来还原 可是我看备份明明都是存在的&#xff0c;而且已经执行了catalog start with命令。 有点奇怪的是catalog start with的时候&#xff0c…

4.10 海思SS928开发 - uboot开发 - 环境变量使用注意

4.10 uboot开发 - 环境变量使用注意 更新 uboot 镜像文件时&#xff0c;环境变量相关工具也需要更新。uboot 镜像文件与环境变量工具如果不对应的话&#xff0c;可能会导致莫名其妙的问题。更新 uboot 镜像文件时&#xff0c;最好将储存在磁盘上的环境变量擦除。因为当磁盘上存…

牛客NC143 矩阵乘法【中等 矩阵 C++/Java/Go/PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/bf358c3ac73e491585943bac94e309b0 思路 矩阵算法在图像处理、神经网络、模式识别等领域有着广泛的用途。在矩阵乘法中&#xff0c;A矩阵和B矩阵可以做乘法运算必须满足A矩阵的列的数量等于B矩阵的行的数量。运算…

d13(126-129)-勇敢开始Java,咖啡拯救人生

目录 Arrays类 数组中存储对象时 排序 在要比较的类中public class 类名 implements Comparable <类名> Comparator JDK8新特性&#xff1a;Lambda表达式 Lambda表达式的省略写法 方法引用 静态方法引用 实例方法引用 特定类型的方法引用 构造器引用 医院挂号系…

FANUC机器人SOCKET连接指令编写

一、创建一个.KL文件编写连接指令 创建一个KL文本来编写FANUC机器人socket连接指令 二、KAREL指令代码 fanuc机器人karel编辑器编辑的karel代码如下&#xff1a; PROGRAM SM_CON %COMMENT SOCKET连接 %STACKSIZE 4000 --堆栈大小 %INCLUDE klevccdfVAR status,data_type,in…

【draw.io的使用心得介绍】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

OpenHarmony实战开发-使用SmartPerf-Host分析应用性能

简介 SmartPerf-Host是一款深入挖掘数据、细粒度展示数据的性能功耗调优工具&#xff0c;可采集CPU调度、频点、进程线程时间片、堆内存、帧率等数据&#xff0c;采集的数据通过泳道图清晰地呈现给开发者&#xff0c;同时通过GUI以可视化的方式进行分析。该工具当前为开发者提…

Swift 中的条件语句:if 和 else

在 Swift 编程语言中&#xff0c;条件语句 if 和 else 是控制程序流程的重要工具。它们允许我们根据不同的条件执行不同的代码块&#xff0c;从而实现更灵活的程序逻辑。 if 语句 if 语句用于执行一个代码块&#xff0c;当指定的条件为真时。其基本语法如下&#xff1a; if …