Spring Cloud Gateway快速入门(三)——过滤器
文章目录
- 前言
- Gateway内置网关过滤器
- 什么是网关过滤器
- Gateway内置网关过滤器
- GlobalFilter
- PreFilter
- PostFilter
- 使用示例
- Gateway全局网关过滤器
- 什么是全局网关过滤器
- 使用全局网关过滤器
- 注册全局网关过滤器
- 使用全局网关过滤器
- 全局网关过滤器和Gateway内置网关过滤器的区别
- 1. 注册方式
- 2. 执行顺序
- 3. 自定义能力
- 4. 灵活性和可扩展性
- 总结
前言
Gateway过滤器是Spring Cloud Gateway提供的一种机制,用于对进入网关的请求和返回进行处理和转换。它可以用于实现各种功能,如请求鉴权、请求转发、请求限流、请求重试等。
Gateway内置网关过滤器
什么是网关过滤器
网关过滤器是Spring Cloud Gateway提供的一种机制,用于在请求进入网关和响应离开网关时进行一些预处理和后处理操作。它们可以用于实现各种功能,如请求鉴权、请求转发、请求限流等。
网关过滤器可以分为全局过滤器、前置过滤器和后置过滤器。全局过滤器会在请求进入网关时被调用,前置过滤器会在路由匹配之前被调用,后置过滤器会在路由匹配之后被调用。
Gateway内置网关过滤器
GlobalFilter
全局过滤器是在请求进入网关时被调用的过滤器。它可以用于实现一些全局的功能,如请求鉴权、请求转发等。
public class MyGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 在此处编写全局过滤器的逻辑return chain.filter(exchange);}
}
PreFilter
前置过滤器是在路由匹配之前被调用的过滤器。它可以用于对请求进行一些预处理操作,如请求鉴权、请求转发等。
public class MyPreFilter implements GatewayFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 在此处编写前置过滤器的逻辑return chain.filter(exchange);}
}
PostFilter
后置过滤器是在路由匹配之后被调用的过滤器。它可以用于对响应进行一些后处理操作,如响应转换、响应加密等。
public class MyPostFilter implements GatewayFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 在此处编写后置过滤器的逻辑return chain.filter(exchange);}
}
使用示例
下面是一个使用全局过滤器、前置过滤器和后置过滤器的示例:
@Configuration
public class GatewayConfig {@Beanpublic MyGlobalFilter myGlobalFilter() {return new MyGlobalFilter();}@Beanpublic MyPreFilter myPreFilter() {return new MyPreFilter();}@Beanpublic MyPostFilter myPostFilter() {return new MyPostFilter();}@Beanpublic RouteLocator customRouteLocator(RouteLocatorBuilder builder) {return builder.routes().route("route1", r -> r.path("/api/**").filters(f -> f.filter(myPreFilter()).filter(myPostFilter())).uri("http://example.com")).build();}
}
在上面的示例中,我们定义了一个全局过滤器MyGlobalFilter
、一个前置过滤器MyPreFilter
和一个后置过滤器MyPostFilter
。然后,我们使用RouteLocatorBuilder
来创建一个自定义的路由定位器,并在路由定义中使用了这些过滤器。
通过以上配置,当请求的路径匹配到/api/**
时,会先经过MyPreFilter
进行预处理,然后经过路由转发,最后经过MyPostFilter
进行后处理。
以上就是关于Gateway内置网关过滤器的介绍和使用示例。通过使用这些过滤器,我们可以方便地实现各种功能和处理逻辑,提升网关的灵活性和可扩展性。
Gateway全局网关过滤器
什么是全局网关过滤器
全局网关过滤器是Spring Cloud Gateway提供的一种机制,用于在请求进入网关时进行一些预处理操作。全局网关过滤器会在所有路由之前被调用,可以用于实现一些全局的功能,如请求鉴权、请求转发等。
使用全局网关过滤器
要使用全局网关过滤器,我们需要实现GlobalFilter
接口,并重写filter()
方法。在filter()
方法中,我们可以编写我们的过滤器逻辑。
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;public class MyGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 在此处编写全局过滤器的逻辑return chain.filter(exchange);}
}
在上面的示例中,我们创建了一个名为MyGlobalFilter
的全局过滤器类,并实现了GlobalFilter
接口。在filter()
方法中,我们可以编写我们的全局过滤器逻辑。最后,我们使用chain.filter(exchange)
来继续请求的处理。
注册全局网关过滤器
要注册全局网关过滤器,我们需要将其作为一个Bean进行注册。
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class GatewayConfig {@Beanpublic MyGlobalFilter myGlobalFilter() {return new MyGlobalFilter();}
}
在上面的示例中,我们创建了一个名为GatewayConfig
的配置类,并在其中将MyGlobalFilter
作为一个Bean进行注册。这样,全局网关过滤器就会被自动加载到Spring Cloud Gateway中。
使用全局网关过滤器
要使用全局网关过滤器,我们只需要在过滤器中编写我们的逻辑即可。下面是一个使用全局网关过滤器的示例:
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;public class MyGlobalFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 在此处编写全局过滤器的逻辑// 检查请求头中是否包含特定的TokenString token = exchange.getRequest().getHeaders().getFirst("Token");if (token == null || token.isEmpty()) {// 如果Token为空,则返回未授权的响应exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}// 如果Token存在,则继续处理请求return chain.filter(exchange);}
}
在上面的示例中,我们在全局网关过滤器中检查请求头中是否包含特定的Token。如果Token为空,则返回未授权的响应;如果Token存在,则继续处理请求。
通过使用全局网关过滤器,我们可以方便地实现全局的功能和处理逻辑,提升网关的灵活性和可扩展性。
以上就是关于Gateway全局网关过滤器的介绍和使用示例。通过使用全局网关过滤器,我们可以在请求进入网关时进行一些全局的预处理操作,实现各种功能和处理逻辑。
全局网关过滤器和Gateway内置网关过滤器的区别
全局网关过滤器和Gateway内置网关过滤器是Spring Cloud Gateway提供的两种不同的过滤器机制。它们之间有以下区别:
1. 注册方式
- 全局网关过滤器:需要将其作为一个Bean进行注册,通过@Configuration注解的配置类或者通过@Bean注解的方法进行注册。
- Gateway内置网关过滤器:内置在Spring Cloud Gateway中,无需手动注册。
2. 执行顺序
- 全局网关过滤器:在所有路由之前被调用,可以用于实现一些全局的功能,如请求鉴权、请求转发等。
- Gateway内置网关过滤器:根据过滤器的类型和顺序进行调用,可以在请求被路由到目标服务之前或之后进行处理。
3. 自定义能力
- 全局网关过滤器:可以根据实际需求自定义过滤器逻辑,实现各种功能和处理逻辑。
- Gateway内置网关过滤器:提供了一些常用的过滤器,如请求头修改、请求日志记录等,但功能相对有限。如果需要更复杂的过滤器逻辑,可能需要自定义全局过滤器。
4. 灵活性和可扩展性
- 全局网关过滤器:由开发者自行实现,具有较高的灵活性和可扩展性,可以根据实际需求自由定制过滤器逻辑。
- Gateway内置网关过滤器:提供了一些常用的过滤器,可以快速实现一些基本功能,但功能相对有限,无法满足所有需求。
综上所述,全局网关过滤器和Gateway内置网关过滤器都是Spring Cloud Gateway提供的过滤器机制,它们在注册方式、执行顺序、自定义能力以及灵活性和可扩展性方面存在一些区别。开发者可以根据实际需求选择合适的过滤器机制来实现网关的功能和处理逻辑。
总结
总结Gateway过滤器的关键点如下:
-
过滤器类型:Gateway过滤器分为全局过滤器和路由过滤器两种类型。
- 全局过滤器:在所有路由之前被调用,用于实现一些全局的功能,如请求鉴权、请求转发等。
- 路由过滤器:根据路由规则进行调用,可以在请求被路由到目标服务之前或之后进行处理。
-
过滤器执行顺序:Gateway过滤器的执行顺序由它们的优先级和添加顺序决定。
- 全局过滤器的执行顺序由它们在应用中的注册顺序决定。
- 路由过滤器的执行顺序由它们在路由规则中的定义顺序决定。
-
过滤器的注册和使用:
- 全局过滤器:需要将其作为一个Bean进行注册,通过@Configuration注解的配置类或者通过@Bean注解的方法进行注册。
- 路由过滤器:在路由规则中定义,并与具体的路由关联。
-
自定义过滤器:可以根据实际需求自定义过滤器逻辑,实现各种功能和处理逻辑。
- 实现GatewayFilter接口来创建自定义过滤器。
- 实现GlobalFilter接口来创建全局过滤器。
-
内置过滤器:Spring Cloud Gateway提供了一些常用的内置过滤器,如请求头修改、请求日志记录等。
- 可以直接在路由规则中使用内置过滤器,也可以通过自定义过滤器链来使用。
通过使用Gateway过滤器,我们可以在请求进入网关时进行一些预处理操作,实现各种功能和处理逻辑,提升网关的灵活性和可扩展性。
相关文章:
Spring Cloud Gateway快速入门(三)——过滤器
文章目录 前言Gateway内置网关过滤器什么是网关过滤器Gateway内置网关过滤器GlobalFilterPreFilterPostFilter 使用示例 Gateway全局网关过滤器什么是全局网关过滤器使用全局网关过滤器注册全局网关过滤器使用全局网关过滤器 全局网关过滤器和Gateway内置网关过滤器的区别1. 注…...
vue3相比vue2的优点
一、响应式: (1)vue2:内置的Object.defineProperty将data中的数据转化成响应式数据的,它会将data中的每个属性都转换为具有getter和setter的响应式属性 Object.defineProperty是一个内置的方法,它用于定义…...

gitee-快速设置
快速设置— 如果你知道该怎么操作,直接使用下面的地址 HTTPS SSH: gitgitee.com:liuzl33078235/esp-idf.git 我们强烈建议所有的git仓库都有一个README, LICENSE, .gitignore文件 初始化 readme 文件 Git入门?查看 帮助 , Visual Studio / TortoiseG…...

将切分的图片筛选出有缺陷的
将切分的图片筛选出有缺陷的 需求代码 需求 由于之前切分的图像有一些存在没有缺陷,需要再次筛选 将可视化的图像更改后缀 更改为xml的 可视化代码 可视化后只有7000多个图像 原本的图像有1W多张 代码 # 按照xml文件删除对应的图片 # coding: utf-8 from P…...

el-tooltip内容换行显示
效果图: html: <div class"rules-tooltip flex-center"><el-tooltip class"item" effect"dark" placement"bottom-start"><div slot"content" v-html"tipsContent"></div>&l…...
linux 下用posix semaphore 解决资源竞争问题实例
/* author: hjjdebug date: 2023年 09月 20日 星期三 09:33:58 CST description: 10辆汽车通过承重5辆汽车的桥,处理一个资源争用问题 * 10个线程代表10辆汽车 * 桥上只能承载5辆汽车, 代表最大只能同时有5辆汽车通过 概要: 让10个线程竞争5个资源,用posix 接口, sem…...

RocketMQ —消费者负载均衡
消费者从 Apache RocketMQ 获取消息消费时,通过消费者负载均衡策略,可将主题内的消息分配给指定消费者分组中的多个消费者共同分担,提高消费并发能力和消费者的水平扩展能力。本文介绍 Apache RocketMQ 消费者的负载均衡策略。 背景信息 …...
Python自动化小技巧23——PDF文件拆分为单独页面(PyMuPDF)
其实编辑PDF用Adobe就行,它功能超级齐全,可是这玩意要收费...去弄免费破解版,找资源又得半天,所以用python来拆分PDF文件吧,可以批量化处理。 至于为什么不用WPS.....别问,问就是不想开会员。 脚本代码 先…...
CISSP学习笔记:通过原则和策略的安全治理
#第一章 通过原则和策略的安全治理 1.1 理解和应用机密性、完整性和可用性的 安全的主要目标,CIA三元组 机密性、完整性和可用性,每条原则的重要性主要取决于组织的安全目标以及安全性所受到的威胁程度 1.1.1 机密性 机密性:限制未授权主…...

【Java 进阶篇】数据定义语言(DDL)详解
数据定义语言(DDL)是SQL(结构化查询语言)的一部分,它用于定义、管理和控制数据库的结构和元素。DDL允许数据库管理员、开发人员和其他用户创建、修改和删除数据库对象,如表、索引、视图等。在本文中&#x…...

MySQL详细案例 1:MySQL主从复制与读写分离
文章目录 1. MySQL主从复制1.1 使用场景1.2 MySQL的复制类型1.3 主从复制的作用1.4 主从复制的工作过程1.5 实现MySQL主从复制1.5.1 前置准备1.5.2 主服务器mysql配置1.5.3 从服务器1 mysql配置1.5.4 从服务器2 mysql配置 1.6 MySQL主从复制延时问题的原因和解决办法1.6.1 故障…...

Kafka 常见问题
文章目录 kafka 如何确保消息的可靠性传输Kafka 高性能的体现利用Partition实现并行处理利用PageCache 如何提高 Kafka 性能调整内核参数来优化IO性能减少网络开销批处理数据压缩降低网络负载高效的序列化方式 kafka 如何确保消息的可靠性传输 消费端弄丢了数据 唯一可能导致…...

如何去开展软件测试工作
1. 软件测试 在一般的项目中,一开始均为手动测试,由于自动化测试前期投入较大,一般要软件项目达到一定的规模,更新频次和质量均有一定要求时才会上自动化测试或软件测试。 1.1. 项目中每个成员的测试职责 软件测试从来不是某一…...

详解如何在python中实现简单的app自动化框架
一、app自动化环境搭建 1、安装jdk及配置jdk的环境变量 app底层是c语言,应用层是java,所以需要jdk 2、安装SDK,配置android SDK环境 3、安装模拟器 4、下载安装Appium工具 01、appium客户端 appium destop 服务器 02、命令行安装&#…...

【TCP】三次握手 与 四次挥手 详解
三次握手 与 四次挥手 1. 三次握手2. 四次挥手三次握手和四次挥手的区别 在正常情况下,TCP 要经过三次握手建立连接,四次挥手断开连接 1. 三次握手 服务端状态转化: [CLOSED -> LISTEN] 服务器端调用 listen 后进入 LISTEN 状态ÿ…...

正则表达式新解
文章目录 是什么?正则用法匹配单个字符匹配一组字符其他元字符核心函数 贪婪匹配和非贪婪匹配正则练习 是什么? 正则表达式(Regular Expression)是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊…...

MissionPlanner编译过程
环境 windows 10 mission planner 1.3.80 visual studio 2022 git 2.22.0 下载源码 (已配置git和ssh) 从github上克隆源码 git clone gitgithub.com:ArduPilot/MissionPlanner.git进入根目录 cd MissionPlanner在根目录下的ExtLibs文件下是链接的其它github源码࿰…...

SpringBoot 员工管理---通用模板 ---苍穹外卖day2
感谢点击 希望你有所收获! 目录 1.新增员工 需求分析:根据页面原型进行业务分析 接口设计 数据库设计 代码开发 功能测试 如何在接口文档中统一添加JWT令牌 获取当前登录员工的ID 2.员工分页查询 需求分析 代码开发 如何将日期格式化 3.启用禁用员工 1.新…...

可信执行环境(Tee)入门综述
SoK: Hardware-supported Trusted Execution Environments [ArXiv22] 摘要引言贡献 范围系统和威胁模型系统模型威胁模型共存飞地对手无特权软件对手系统软件对手启动对手外围对手结构对手侵入性对手 关于侧信道攻击的一点注记 VERIFIABLE LAUNCH信任根(RTM…...
Java浮点运算为什么不精确
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址[1] 面试题手册[2] 系列文章地址[3] 1. 什么是 Java 浮点运算? 在 Java 中,浮点运算指的是对浮点数进行加减乘除等基本运算…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
【Linux】shell脚本忽略错误继续执行
在 shell 脚本中,可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行,可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令,并忽略错误 rm somefile…...
ubuntu搭建nfs服务centos挂载访问
在Ubuntu上设置NFS服务器 在Ubuntu上,你可以使用apt包管理器来安装NFS服务器。打开终端并运行: sudo apt update sudo apt install nfs-kernel-server创建共享目录 创建一个目录用于共享,例如/shared: sudo mkdir /shared sud…...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...
连锁超市冷库节能解决方案:如何实现超市降本增效
在连锁超市冷库运营中,高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术,实现年省电费15%-60%,且不改动原有装备、安装快捷、…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

2025季度云服务器排行榜
在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...