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

【spring 】Spring Cloud Gateway 的Filter学习

介绍和使用场景

Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关,它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中,Filter 扮演着非常重要的角色,以下是 Filter 的一些主要作用:

  1. 请求路由:Filter 可以根据请求的特定条件(如路径、头信息、参数等)将请求路由到不同的服务。

  2. 请求修改:在请求被路由到目标服务之前,Filter 可以修改请求的内容,比如添加或删除请求头、修改请求参数等。

  3. 响应修改:Filter 可以在将响应返回给客户端之前修改响应的内容,比如添加或删除响应头、修改响应体等。

  4. 身份验证和授权:Filter 可以用于实现安全控制,比如检查请求中的认证信息,确保只有授权的用户才能访问特定的资源。

  5. 限流和熔断:Filter 可以实现限流功能,控制对特定服务的访问频率,以及熔断机制,防止服务过载。

  6. 日志记录和监控:Filter 可以在请求和响应的生命周期中记录日志,用于监控和调试。

  7. 请求聚合:Filter 可以将多个微服务的响应聚合到一个响应中,实现数据的聚合和重组。

  8. 错误处理:Filter 可以捕获和处理请求处理过程中的错误,返回给客户端统一的错误响应。

  9. 跨域资源共享(CORS):Filter 可以处理跨域请求,添加必要的响应头,以支持前端应用的跨域请求。

  10. 缓存控制:Filter 可以实现缓存机制,减少对后端服务的请求,提高系统性能。

常见gateway的filter

spring gateway的filter 包路径org.springframework.cloud.gateway.filter

  1. Built-in Filter Factories(内置过滤器工厂):Spring Cloud Gateway 提供了一系列内置的过滤器工厂,这些工厂可以用来实现常见的功能,如请求头修改、路径重写等。这些过滤器工厂是预定义的,可以直接在配置中使用。

  2. Custom Filters(自定义过滤器):除了内置的过滤器工厂,Spring Cloud Gateway 还支持自定义过滤器的开发。开发者可以根据自己的需求实现特定的逻辑,比如添加认证、日志记录等。

  3. Pre-filter(前置过滤器):在路由到微服务之前执行的过滤器。这类过滤器通常用于修改请求头、认证、日志记录等。

  4. Post-filter(后置过滤器):在路由到微服务之后执行的过滤器。这类过滤器可以用于修改响应头、日志记录等。

  5. Global Filter(全局过滤器):全局过滤器会对所有的路由请求生效,通常用于实现跨域资源共享(CORS)等全局性的功能。

  6. Route Filter(路由过滤器):与特定路由关联的过滤器,用于处理特定路由的请求和响应

1. AddRequestHeader

这个 Filter 用于在请求中添加一个 HTTP 头。

filters:- AddRequestHeader=X-Request-Foo, Bar

这会在请求中添加一个名为 X-Request-Foo 的头,其值为 Bar

2. AddRequestParameter

这个 Filter 用于在请求中添加一个查询参数。

filters:- AddRequestParameter=foo, bar

这会在请求中添加一个名为 foo 的查询参数,其值为 bar

3. AddResponseHeader

这个 Filter 用于在响应中添加一个 HTTP 头。

filters:- AddResponseHeader=X-Response-Foo, Bar

这会在响应中添加一个名为 X-Response-Foo 的头,其值为 Bar

4. DedupeResponseHeader

这个 Filter 用于在响应中删除重复的 HTTP 头。

filters:- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

这会删除响应中重复的 Access-Control-Allow-Credentials 和 Access-Control-Allow-Origin 头。

5. PrefixPath

这个 Filter 用于在请求路径前添加一个前缀。

filters:- PrefixPath=/mypath

这会在请求路径前添加 /mypath 前缀。

6. PreserveHostHeader

这个 Filter 用于保留原始请求的主机头。

filters:- PreserveHostHeader
 

7. RequestRateLimiter

这个 Filter 用于限制请求速率。

filters:- name: RequestRateLimiterargs:key-resolver: "#{@userKeyResolver}"redis-rate-limiter.replenishRate: 10redis-rate-limiter.burstCapacity: 20

这会使用 Redis 来限制请求速率。

8. RewritePath

这个 Filter 用于重写请求路径。

filters:- RewritePath=/foo/(?<segment>.*), /$\{segment}

这会将 /foo/bar 重写为 /bar

9. SetPath

这个 Filter 用于设置请求路径。

​
filters:- SetPath=/{segment}​

这会将请求路径设置为 /segment

10. SetRequestHeader

这个 Filter 用于设置请求头。

filters:- SetRequestHeader=X-Request-Foo, Bar

这会将请求头 X-Request-Foo 设置为 Bar

11. SetResponseHeader

这个 Filter 用于设置响应头。

filters:- SetResponseHeader=X-Response-Foo, Bar

这会将响应头 X-Response-Foo 设置为 Bar

12. StripPrefix

这个 Filter 用于去除请求路径的前缀。

filters:- StripPrefix=1

这会去除请求路径的第一个前缀。

13. Retry

这个 Filter 用于重试请求。

filters:- name: Retryargs:retries: 3statuses: BAD_GATEWAY

这会在请求失败时重试 3 次。

14. RequestSize

这个 Filter 用于限制请求的大小。

filters:- name: RequestSizeargs:maxSize: 5000000

这会限制请求的大小为 5MB。

15. ModifyRequestBody

这个 Filter 用于修改请求体。

filters:- name: ModifyRequestBodyargs:contentType: "application/json"rewriteFunction: "com.example.RewriteRequestBody::rewrite"

这会使用自定义的 rewrite 方法来修改请求体。

16. ModifyResponseBody

这个 Filter 用于修改响应体。

filters:- name: ModifyResponseBodyargs:contentType: "application/json"rewriteFunction: "com.example.RewriteResponseBody::rewrite"

这会使用自定义的 rewrite 方法来修改响应体。

17. SecureHeaders

这个 Filter 用于添加安全相关的响应头。

filters:- SecureHeaders

这会添加一些安全相关的响应头,如 X-XSS-ProtectionX-Frame-Options 等。

18. FallbackHeaders

这个 Filter 用于在发生错误时添加响应头。

filters:- FallbackHeaders

这会在发生错误时添加一些响应头。

19. RequestHeaderToRequestUri

这个 Filter 用于将请求头转换为请求 URI。

filters:- RequestHeaderToRequestUri=X-CF-Forwarded-Url

这会将 X-CF-Forwarded-Url 头的内容转换为请求 URI。

20. SetStatus

这个 Filter 用于设置响应状态码。

filters:- SetStatus=401

这会将响应状态码设置为 401。




相关文章:

【spring 】Spring Cloud Gateway 的Filter学习

介绍和使用场景 Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关&#xff0c;它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中&#xff0c;Filter 扮演着非常重要的角色&#…...

每秒交易数(Transactions Per Second:TPS)详细拆解

每秒交易数&#xff08;TPS&#xff09;是指计算机网络每秒可以处理的交易数量。TPS是衡量不同区块链和其他计算机系统速度的关键指标。然而&#xff0c;TPS并不是用来衡量区块链速度的唯一指标。许多人认为&#xff0c;虽然TPS很重要&#xff0c;但最终性实际上是一个更重要的…...

【初阶数据结构与算法】链表刷题之链表分割、相交链表、环形链表1、环形链表I、环形链表II

文章目录 一、链表分割二、相交链表三、环形链表I四、环形链表|| 一、链表分割 题目链接&#xff1a;https://www.nowcoder.com/practice/0e27e0b064de4eacac178676ef9c9d70 我们来看看链表分割的题目描述和它给出的函数&#xff1a;    这个题虽然是以C形式来做&#xff0…...

【STL】set,multiset,map,multimap的介绍以及使用

关联式容器 在C的STL中包含序列式容器和关联式容器 1.关联式容器&#xff1a;它里面存储的是元素本身&#xff0c;其底层是线性序列的数据结构&#xff0c;比如&#xff1a;vector&#xff0c;list&#xff0c;deque&#xff0c;forward_list(C11)等 2.关联式容器里面储存的…...

新能源二手车交易量有望破百万,二手车市场回暖了吗?

这些年&#xff0c;伴随着新能源汽车市场的高速发展&#xff0c;各种新能源车的二手车也在逐渐增加&#xff0c;不过之前的二手车市场相对比较冷清&#xff0c;就在最近一则新闻传出新能源二手车交易量有望破百万&#xff0c;二手车市场这是回暖了吗&#xff1f; 一、新能源二手…...

哈佛商业评论 | 项目经济的到来:组织变革与管理革新的关键

在21世纪,项目经济(Project Economy)逐步取代传统运营,成为全球经济增长的核心动力。项目已不再是辅助工具,而是推动创新和变革的重要载体。然而,只有35%的项目能够成功,显示出项目管理领域存在巨大的改进空间。本文将详细探讨项目经济的背景、项目管理的挑战,以及适应…...

web浏览器环境下使用window.open()打开PDF文件不是预览,而是下载文件?

如果你使用 window.open() 方法打开 PDF 文件&#xff0c;但浏览器不是预览而是下载文件&#xff0c;这可能是由于以下几个原因&#xff1a; 服务器配置&#xff1a;服务器可能将 PDF 文件配置为下载而不是预览。例如&#xff0c;服务器可能设置了 Content-Disposition 响应头…...

【GeekBand】C++设计模式笔记12_Singleton_单件模式

1. “对象性能” 模式 面向对象很好地解决了 “抽象” 的问题&#xff0c; 但是必不可免地要付出一定的代价。对于通常情况来讲&#xff0c;面向对象的成本大都可以忽略不计。但是某些情况&#xff0c;面向对象所带来的成本必须谨慎处理。典型模式 SingletonFlyweight 2. Si…...

Pyhon基础数据结构(列表)【蓝桥杯】

a [1,2,3,4,5] a.reverse() print("a ",a) a.reverse() print("a ",a)# 列表 列表&#xff08;list&#xff09;有由一系列按照特定顺序排序的元素组成 列表是有顺序的&#xff0c;访问任何元素需要通过“下标访问” 所谓“下标”就是指元素在列表从左…...

Linux篇(权限管理命令)

目录 一、权限概述 1. 什么是权限 2. 为什么要设置权限 3. Linux中的权限类别 4. Linux中文件所有者 4.1. 所有者分类 4.2. 所有者的表示方法 属主权限 属组权限 其他权限 root用户&#xff08;超级管理员&#xff09; 二、普通权限管理 1. ls查看文件权限 2. 文件…...

深入理解 Spark 中的 Shuffle

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…...

leetcode-8-字符串转整数

题解: 代码:...

SQL注入注入方式(大纲)

SQL注入注入方式&#xff08;大纲&#xff09; 常规注入 通常没有任何过滤&#xff0c;直接把参数存放到SQL语句中。 宽字节注入 GBK 编码 两个字节表示一个字符ASCII 编码 一个字节表示一个字符MYSQL默认字节集是GBK等宽字节字符集 原理&#xff1a; 设置MySQL时错误配置…...

OpenCV基础(1)

1.图像读写与窗口显示 1.1.imread读取图像文件 Mat cv::imread(const string &filename,int flags IMREAD_COLOR); filename&#xff1a;要读取的图像文件名flags&#xff1a;读取模式&#xff0c;可以从枚举cv::ImreadModes中取值&#xff0c;默认取值是IMREAD_COLOR&am…...

【freertos】FreeRTOS信号量的介绍及使用

FreeRTOS信号量 一、概述二、PV原语三、函数接口1.创建一个计数信号量2.删除一个信号量3.信号量释放4.在中断释放信号量5.获取一个信号量&#xff0c;可以是二值信号量、计数信号量、互斥量。6.在中断获取一个信号量&#xff0c;可以是二值信号量、计数信号量7.创建一个二值信号…...

React Native 全栈开发实战班 - 图片加载与优化

在移动应用中&#xff0c;图片加载与优化 是提升用户体验和减少资源消耗的重要环节。图片加载不当可能导致应用卡顿、内存泄漏甚至崩溃。本章节将介绍 React Native 中常用的图片加载方法&#xff0c;包括 Image 组件的使用、第三方图片加载库&#xff08;如 react-native-fast…...

Golang云原生项目:—实现ping操作

熟悉报文结构 ICMP校验和算法&#xff1a; 报文内容&#xff0c;相邻两个字节拼接到一起组成一个16bit数&#xff0c;将这些数累加求和若长度为奇数&#xff0c;则将剩余一个字节&#xff0c;也累加求和得出总和之后&#xff0c;将和值的高16位与低16位不断求和&#xff0c;直…...

mysql如何查看当前事务的事务id

-- 开启一个事务&#xff0c;但不执行写操作 START TRANSACTION; -- 查询 InnoDB 事务信息 SELECT * FROM information_schema.innodb_trx;在 MySQL 的 MVCC (多版本并发控制) 中&#xff0c;事务 ID (Transaction ID) 是由 InnoDB 存储引擎分配的&#xff0c;它的分配机制与事…...

在linux里如何利用vim对比两个文档不同的行数

在Linux中&#xff0c;可以使用vimdiff命令来对比两个文档中不同的行。首先确保你的系统中安装了vim编辑器。 打开终端&#xff0c;使用以下命令来启动vimdiff&#xff1a; vimdiff file1 file2 这里file1和file2是你想要对比的两个文件的路径。 vimdiff会以并排方式打开两…...

深入解析Python中的逻辑回归:从入门到精通

引言 在数据科学领域&#xff0c;逻辑回归&#xff08;Logistic Regression&#xff09;是一个非常重要的算法&#xff0c;它不仅用于二分类问题&#xff0c;还可以通过一些技巧扩展到多分类问题。逻辑回归因其简单、高效且易于解释的特点&#xff0c;在金融、医疗、广告等多个…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候&#xff0c;难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵&#xff0c;或者买了二手 iPhone 却被原来的 iCloud 账号锁住&#xff0c;这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

用机器学习破解新能源领域的“弃风”难题

音乐发烧友深有体会&#xff0c;玩音乐的本质就是玩电网。火电声音偏暖&#xff0c;水电偏冷&#xff0c;风电偏空旷。至于太阳能发的电&#xff0c;则略显朦胧和单薄。 不知你是否有感觉&#xff0c;近两年家里的音响声音越来越冷&#xff0c;听起来越来越单薄&#xff1f; —…...

Unity UGUI Button事件流程

场景结构 测试代码 public class TestBtn : MonoBehaviour {void Start(){var btn GetComponent<Button>();btn.onClick.AddListener(OnClick);}private void OnClick(){Debug.Log("666");}}当添加事件时 // 实例化一个ButtonClickedEvent的事件 [Formerl…...