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

Spring Cloud GateWay简介

什么是网关

网关是一种充当转换重任的计算机系统或设备,使用在不同的通信协议、数据格式或语言,甚至网关是一种充当转换重任的计算机系统或设备,使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间进行数据传输.
网关具备转发, 路由和数据过滤的功能, 它能够识别不同网络中的数据包, 并根据器目的地址和源地址决定如何转发数据. 同时, 网关还可以实施网络安全策略, 对进出的数据包进行检查和过滤, 保护网络安全.
网关在互联网中起到重要作用, 它连接了内部局域网好外部互联网, 使得数据能够在不同网络之间传递和交换.

网关有什么作用

  1. 路由功能: 根据目标地址的不同选择最佳的路径
  2. 安全控制(统一认证授权): 对进出的数据包进行检查和过滤, 它可以授权来自源网络的数据包, 并且阻止未授权的访问.
  3. 协议转换: 网关可以进行协议转换, 使得不同的网络设备可以进行通信, 例如: 将 HTTPS 转换成 HTTP.
  4. 网络地址转换(NAT): 将内部网络使用的私有 IP 地址转换成外部网络使用的公共 IP 地址.

Spring Cloud GateWay 组成

  1. 路由(Route): 定义了请求应该被转发到哪个目标地址. 路由由 ID, 目标URI, 断言好过滤器组成. 通过配置多个路由, 可以实现不同请求的路由规则.
  2. 断言(Predicate): 用于匹配请求的条件, 如果请求匹配断言条件, 则会被路由转发到对应的目标地址.
  3. 过滤器(Filter): 用于请求路由前或请求后进行一些处理, 如添加头部信息, 修改请求体等.

Spring Cloud GateWay 基础使用

添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

注意: Spring Cloud GateWay 底层是基于响应式 Reactor Web 实现的已经包含了 Web 所以这两个依赖同时引入就会报错

设置路由规则

server:port: 10086spring:cloud:gateway:routes:- id: user-serviceuri: http://localhost:9090predicates:- Path=/user/**, /userlog/**# 匹配多个路径时可以用英文逗号隔开- id: order-serviceuri: http://localhost:9091predicates:- Path=/order/**

断言类型

Spring Cloud GateWay 目前支持 12 种断言类型

  1. After: 请求在指定时间之后才能匹配
  2. Before: 请求在指定时间之前才能匹配
  3. Between: 请求在指定时间中才能匹配
  4. Cookie: 匹配请求中的 Cookie 值
  5. Header: 匹配请求中的 Header 值
  6. Host: 匹配请求头中的 Host 值
  7. Method: 匹配请求头中的 Method 值
  8. Path: 匹配请求路径
  9. Query: 匹配请求参数
  10. RemoteAddr: 匹配请求的 IP 地址
  11. Weight: 根据权重分发请求
  12. XDorwardedRemoteAddr: 根据 X-Forwarded-For匹配

过滤器

过滤器主要有以下几个功能:

  1. 功能扩展和定制: 通过拦截和处理数据流或事件流, 可以修改数据, 增加额外的功能逻辑, 实现特点的业务需求
  2. 数据校验和过滤: 在接收到数据之后, 可以使用过滤器对数据进行检查, 严重数据的合法性, 过滤掉无效或不符合要求的数据
  3. 安全保护: 可以控制访问, 验证权限, 对输入的请求进行检查和清洗
  4. 性能优化: 可以对数据进行转换, 过滤或者缓存, 以提高处理速度和效率,. 还可以用于数据压缩, 缓存预热等场景, 减少数据传输和处理的成本
  5. 统一处理和逻辑复用: 可以在不同组件或模块上应用相同的逻辑或处理方式

内置过滤器

内置过滤器分为局部过滤器全局过滤器
局部过滤器和全局过滤器用法相同只是一个只适用于当前匹配的服务一个适用于全局

    gateway:routes:- id: user-serviceuri: lb://user-service-demopredicates:- Path=/user/**filters:  # 局部过滤器- AddResponseHeader=My-Resp-Header,javacn- id : order-serviceuri: lb://order-service-demopredicates:- Path=/order/**default-filters: # 全局过滤器- AddResponseHeader=My-Resp-Header2,javacn2- AddRequestHeader=My-Req, javacn

Retry

GateWay中也可以和OpenFeign一样配置重试机制

spring:application:name: gateway-servicecloud:nacos:discovery:server-addr: localhost:8848username: nacospassword: nacosregister-enabled: falsegateway:routes:- id: user-serviceuri: lb://user-service-demopredicates:- Path=/user/**filters:- AddResponseHeader=My-Resp-Header,javacn- name: Retryargs:retries: 3 # 重试次数statuses: GATEWAY_TIMEOUT # 重试的 HTTP 状态代码=504methods: GET # 重试的 HTTP 方法series: SERVER_ERROR # 重试状态码段 5xx 状态backoff: # 重试指数配置策略firstBackoff: 10ms # 第一次重试间隔maxBackoff: 50ms # 最大重试间隔factor: 2 # firstBackoff * (factor ^ n)basedOnPreviousValue: false # 基于上次值

注意: name必须是Retry, 否则识别不了

自定义全局过滤器

Spring Cloud GateWay 中也提供了自定义全局过滤器, 我们可以通过它来实现统一认证授权等功能

package com.example.gatewayservice.filter;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.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Component
public class AuthFilter implements GlobalFilter, Ordered {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 获取request对象ServerHttpRequest request = exchange.getRequest();// 获取response对象ServerHttpResponse response = exchange.getResponse();// 获取参数String username = request.getQueryParams().getFirst("username");String password = request.getQueryParams().getFirst("password");if (username != null && username.equals("admin") && password != null && password.equals("admin")) {return chain.filter(exchange);}else {// 设置无权限 401response.setStatusCode(HttpStatus.UNAUTHORIZED);// 执行完成不在往下执行return response.setComplete();}}@Overridepublic int getOrder() {// 值越小越早执行return 1;}
}

相关文章:

Spring Cloud GateWay简介

什么是网关 网关是一种充当转换重任的计算机系统或设备&#xff0c;使用在不同的通信协议、数据格式或语言&#xff0c;甚至网关是一种充当转换重任的计算机系统或设备&#xff0c;使用在不同的通信协议、数据格式或语言&#xff0c;甚至体系结构完全不同的两种系统之间进行数…...

耿明雨出席柬方70周年招待会晚宴

11月9日&#xff0c;庆祝柬埔寨独立和建军70周年欢迎晚宴上&#xff0c;全国政协副主席沈跃跃盛邀出席&#xff0c;此次招待会是由柬埔寨王国驻华大使馆主办&#xff0c;在北京励骏酒店圆满召开&#xff0c;晚宴现场&#xff1b;凯西索达大使致辞、中国外交部部长助理徐飞洪等领…...

退役记 + 秋招总结,占坑

感觉需要写点什么东西来记录一下自己的秋招&#xff0c;以及还有一篇退役记没有写。 思考了一下&#xff0c;感觉发在空间并没有很合适&#xff0c;还是写个博客好了。 最近有点颓&#xff0c;就先买个坑在这里&#xff0c;省的彻底咕掉。 如果今年年底还没写出来的话&#xff…...

网络类型及数据链路层的协议

网络类型 --- 根据数据链路层使用的协议来进行划分的。 MA网络 --- 多点接入网络 BMA --- 广播型多点接入网络---以太网协议 NBMA --- 非广播型多点接入网络 以太网协议 --- 需要使用mac地址对不同的主机设备进行区分和标识 --- 以太网之所以需要使用mac地址进行数据寻址&…...

ROC 曲线:健康背景下的应用和解释

一、介绍 在医疗保健领域&#xff0c;做出明智的决策对于改善患者治疗结果、有效分配资源和设计有效的诊断测试至关重要。受试者工作特征 (ROC) 曲线是一个强大的工具&#xff0c;在评估诊断测试的性能、区分健康个体和患病个体以及优化医疗保健干预方面发挥着至关重要的作用。…...

SpringBoot + Disruptor 实现特快高并发处理,使用Disruptor高速实现队列

1 前言 工作中遇到项目使用Disruptor做消息队列&#xff0c;对&#xff01;你没看错&#xff0c;不是Kafka也不是rabbitmq。Disruptor有个最大的优点就是快&#xff0c;还有一点它是开源的哦&#xff0c;下面做个简单的记录。 2 Disruptor介绍 Disruptor 是英国外汇交易公司…...

git push origin HEAD:refs/for/master

git push <远程主机名> <本地分支名> : <远程分支名> 例如 git push origin master&#xff1a;refs/for/master 是将本地的master分支推送到远程主机origin上的对应master分支 origin 是远程主机名&#xff0c; 第一个master是本地分支名&#xff0c; 第二…...

S25FL256S介绍及FPGA实现思路

本文介绍 S25FL256S 这款 FLASH 芯片&#xff0c;并进行 FPGA 读写控制的实现&#xff08;编程思路及注意事项&#xff09;。 文章目录 S25FL-S 介绍管脚功能说明SPI 时钟模式SDRDDR 工作模式FLASH存储阵列&#xff08;地址空间映射&#xff09;常用寄存器及相关指令Status Reg…...

淘宝客APP源码/社交电商自营商城源码/前端基于Uniapp开发

淘宝客APP源码&#xff0c;前端基于Uniapp开发的社交电商自营商城源码。Thinkphp的后台&#xff0c;不是很标准&#xff0c;感兴趣的可以自行研究。 商城功能 1、首页基础装修&#xff1b;2、丰富选品库&#xff1b;3、淘口令解析&#xff1b;4、支持京东&#xff1b;5、支持…...

Oracle 服务器日常巡检

文章目录 1、数据库基本状况检查2、数据库相关资源使用情况检查3、检查Oracle数据库性能4、数据库服务器CPU、MEM、I/O性能5、数据库服务器安全检查 Oracle数据库的日常巡检内容包括&#xff1a; &#xff08;1&#xff09;Oracle数据库基本状况检查&#xff1b; &#xff08…...

【轨道机器人】实现Windows与下位机串口通信(未完成)

方案一&#xff1a;QT&#xff0c;编写类似串口调试助手的APP&#xff0c;连接上硬件&#xff0c;qt有个好像是串口缓存函数&#xff0c;可以防止占用CPU。&#xff08;缺点qt估计要时间学&#xff09; 方案二&#xff1a;利用vscode、C&#xff0c;编写一个可执行exe文件&…...

无人机内存卡数据恢复

1.插入内存卡 2.选择对应的品牌 3.点击恢复 建议&#xff1a;发现数据打不开或者丢失情况&#xff0c;建议及时断电&#xff0c;以免影响数据的正常恢复&#xff01; #无人机##数据恢复##储存卡#...

基于SSM的校园二手物品交易市场设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

Android14 Beta 5

Beta 5&#xff0c;这是 Android 14 Beta 计划中的最后一次计划更新。这是确保您的应用程序已准备就绪并在非 Beta 用户开始获取 Android 14 之前提供反馈的最后机会。为了使您能够在跨多种外形尺寸的设备上测试您的应用程序&#xff0c;Beta 5 适用于 Pixel Tablet 和 Pixel F…...

力扣labuladong——一刷day32

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、力扣654. 最大二叉树二、力扣105. 从前序与中序遍历序列构造二叉树三、力扣106. 从中序与后序遍历序列构造二叉树四、力扣889. 根据前序和后序遍历构造二叉…...

Day01_《MySQL索引与性能优化》摘要

一、资料 视频&#xff1a;《尚硅谷MySQL数据库高级&#xff0c;mysql优化&#xff0c;数据库优化》—周阳 其他博主的完整笔记&#xff1a;MySQL 我的笔记&#xff1a;我的笔记只总结了视频p14-p46部分&#xff0c;因为只有这部分是讲解了MySQL的索引与explain语句分析优化…...

BMS系统项目

1、通过电压监测是否冲满&#xff0c;通过电压可以监测是否放完电 电池得参数 单体过压&#xff08;充满电&#xff09; 过压恢复&#xff08;百分之90多&#xff09; 欠压保护&#xff08;百分之几得电&#xff0c;快关机了&#xff09; 欠压恢复&#xff08;就是欠压之上…...

sql server 多行数据合并一行显示

在 SQL Server 中&#xff0c;可以使用 STUFF 和 FOR XML PATH 进行多行合并成一行。例如&#xff0c;假设有一个表名为 orders &#xff0c;其中包含订单号和产品名称&#xff1a; order_idproduct_name1Product A1Product B2Product C2Product D 以下查询将在 order_id 列上…...

「我的AIGC咒语库:分享和AI对话交流的秘诀——如何利用Prompt和AI进行高效交流?」

文章目录 每日一句正能量前言基础介绍什么是Prompt?什么是 Prompt Engineering&#xff1f;为什么需要 Prompt Engineering&#xff1f;如何进行 Prompt Engineering&#xff1f;Prompt的基本原则Prompt的编写模式AI 可以帮助程序员做什么&#xff1f;技术知识总结拆解任务阅读…...

强国有我助力苔花绽放 | 爱心捐赠仪式在西安顺利举办

2023年11月2日&#xff0c;由中国儿童中心、全国少年儿童“双有”主题教育活动组委会、中华少年儿童慈善救助基金会强国有我项目主办&#xff0c;陕西省青少年宫协会、陕西省妇女儿童活动中心、陕西回归儿童救助中心承办的“苔花绽放”事实无人抚养儿童关爱计划捐赠仪式在陕西回…...

Flink SQL -- CheckPoint

1、开启CheckPoint checkpoint可以定时将flink任务的状态持久化到hdfs中&#xff0c;任务执行失败重启可以保证中间结果不丢失 # 修改flink配置文件 vim flink-conf.yaml# checkppint 间隔时间 execution.checkpointing.interval: 1min # 任务手动取消时保存checkpoint execu…...

Load-balanced-online-OJ-system 负载均衡的OJ系统项目

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 本项目Github地址 - Load-balanced-o…...

ES6 导入导出

ES6 导入导出 ES6引入了原生的模块化支持&#xff0c;使得JavaScript代码可以被划分为可重用的模块。这些模块可以导出部分代码&#xff08;如函数、对象、类等&#xff09;&#xff0c;并被其他模块导入使用。 export 命名导出&#xff08;Named Exports&#xff09; 可以从…...

【Liunx】部署Ansible自动化运维工具

Ansible自动化运维工具 概述安装部署1.通过yum下载Ansible2.对自己做免密配置3.修改ansiable host配置对服务器进行分组4.测试&#xff1a;对所有服务器进行ping命令5.写playbook6.执行我们写的playbook脚本7.验证 概述 ansible是新出现的自动化运维工具&#xff0c;基于Pytho…...

Python的基础语法

1. 注释&#xff1a;在Python中&#xff0c;使用井号&#xff08;#&#xff09;表示单行注释&#xff0c;三个单引号&#xff08;&#xff09;或三个双引号&#xff08;"""&#xff09;表示多行注释。 2. 变量&#xff1a;在Python中&#xff0c;不需要声明变量…...

Skywalking流程分析_8(拦截器插件的加载)

前言 在之前的文章中我们将&#xff0c;静态方法、构造方法、实例方法的增强逻辑都分析完毕&#xff0c;但在增强前&#xff0c;对于拦截类的加载是至关重要的&#xff0c;下面我们就来详细的分析 增强插件的加载 静态方法增强前的加载 //clazz 要修改的字节码的原生类 Sta…...

智能AI系统ChatGPT网站源码+支持OpenAI DALL-E3文生图+支持ai绘画(Midjourney)/支持GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…...

腾讯云服务器可用区是什么意思?可用区选择方法

腾讯云服务器可用区是什么意思&#xff1f;云服务器可用区如何选择&#xff1f;可用区是指在同一个地域内电力和网络相互独立的区域&#xff0c;可用区可以做到故障隔离&#xff0c;所以可用区存在的意义在于构建高可用、高容灾应用&#xff0c;将应用部署在不同可用区内&#…...

Jupyter运行显存爆炸,明明上一个单元格已经运行完毕为什么还是会炸?

问题再现 上一个单元格运行完了train()&#xff0c;我想要用模型输出做点东西&#xff0c;可是提醒我显存不够&#xff1b; 在命令行中查看显存占用情况&#xff0c;发现4张卡都占满了&#xff0c;可真是太厉害了&#xff01; 解决方案 查看原来写的validate()&#xff0c;发…...

【ICE】webrtc lite 1:cmake构建

p2ptransportchannel 是 ICE 实现基于此实现了DTLTransport而前者是独立的模块。依赖库较少主要是ssl absl OpenSSL Protobuf 可选 absl webrtc 不支持大端 :big endian architectures defined in WebRTC’s arch.h D_WINSOCKAPI_ 用来做啥? 以下编译选项: add_compile_opti…...