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

Spring Cloud Alibaba: Gateway 网关过滤器 GatewayGatewayFilter factory (记录)

目录

AddRequestHeader GatewayFilter factory

AddRequestHeadersIfNotPresent GatewayFilter factory

AddRequestParameter GatewayFilter Factory

AddResponseHeader GatewayFilter Factory

CircuitBreaker GatewayFilter factory

circuit breaker based on the status code

PrefixPath GatewayFilter factory

StripPrefix GatewayFilter factory

RewritePath GatewayFilter factory

RequestRateLimiter GatewayFilter factory

default-filters

自定义GatewayFilter

多filter的运行


AddRequestHeader GatewayFilter factory

添加对应key和value

server:port: 9000
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:7070predicates:- Path=/info/**filters:- AddRequestHeader=X-Request-Color, blue

controller获取请求头遍历输出

postman加请求头也能输出

AddRequestHeadersIfNotPresent GatewayFilter factory

可以添加多组key和value(请求头不存在对应key的情况下)

server:port: 9000
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:7070predicates:- Path=/info/**filters:- AddRequestHeadersIfNotPresent=X-Request-Color:blue,school:rjxy
@GetMapping("/allHeaders")public String allHeadersHandle(HttpServletRequest request){StringBuilder sb = new StringBuilder();//获取请求头所有的keyEnumeration<String> headerNames = request.getHeaderNames();//遍历所有keywhile (headerNames.hasMoreElements()) {//获取keyString name = headerNames.nextElement();sb.append(name+"===");//获取当前key的所有valueEnumeration<String> headers = request.getHeaders(name);//遍历所有valuewhile (headers.hasMoreElements()) {//将当前遍历的value追加到sb中sb.append(headers.nextElement()+"");}sb.append("<br>");
​}return sb.toString();}

controller进行请求头遍历输出,添加成功

 

AddRequestParameter GatewayFilter Factory

添加请求参数

server:port: 9000
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:7070predicates:- Path=/info/**filters:- AddRequestParameter=red, blue

controller

@GetMapping("/params")public String paramsHandle(String red){
​return red;}

 

获取成功

AddResponseHeader GatewayFilter Factory

响应修改

server:port: 9000
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:7070predicates:- Path=/info/**filters:- AddResponseHeader=X-Response-color, Blue- AddResponseHeader=X-Response-color, Red

直接F12查看响应头,添加成功

 

CircuitBreaker GatewayFilter factory

熔断过滤工厂,完成网关层的服务熔断与降级

server:port: 9000
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:7070predicates:- Path=/info/**filters:- name: CircuitBreakerargs:name: myCircuitBreakerfallbackUri: forward:/fb

访问http://localhost:7070不成功时,降级访问forward:/fb

降级controller

@GetMapping("/fb")public String fallbackHandle(){return "This is the Gateway Fallback";}

测试,直接不启动7070,访问9000,熔断成功

 

circuit breaker based on the status code

PrefixPath GatewayFilter factory

server:port: 9000
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:8081predicates:- Path=/student/**filters:- PrefixPath=/provider

匹配字段,加上前缀,子模块自动添加路径

 

测试成功

StripPrefix GatewayFilter factory

去除指定的请求路径

server:port: 9000
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:8081predicates:- Path=/aa/bb/provider/student/**filters:- StripPrefix=2

去除/aa/bb

 

测试成功

RewritePath GatewayFilter factory

重写路径

server:port: 9000
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:8081predicates:- Path=/red/blue/**filters:- RewritePath=/red/blue,/provider/student//            - RewritePath=/red/?(?<segment>.*), /$\{segment}

匹配路径,替换成指定路径

 

RequestRateLimiter GatewayFilter factory

通过令牌桶算法对进来的请求进行限流

导入依赖

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-redis-reactive -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis-reactive</artifactId><version>3.0.5</version>
</dependency>

添加限流键解析器

在启动类中添加一个限流键解析器,其用于从请求中解析出需要限流的key。

本例指定的是根据请求的host或ip进行限流。

package com.guo;
​
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import reactor.core.publisher.Mono;
​
@SpringBootApplication
public class Application {
​public static void main(String[] args) {SpringApplication.run(Application.class, args);}
​@BeanKeyResolver userKeyResolver() {return exchange -> Mono.just(exchange.getRequest().getRemoteAddress().getHostName());}
}

修改配置文件

server:port: 9000
​
​
​
spring:cloud:gateway:routes:- id: my_routeuri: http://localhost:8081predicates:- Path=/**filters:
#              replenishRate 填充率- name: RequestRateLimiterargs:key-resolver: "#{@userKeyResolver}"redis-rate-limiter.replenishRate: 2redis-rate-limiter.burstCapacity: 5redis-rate-limiter.requestedTokens: 1data:redis:host: 127.0.0.1port: 6379

 

成功

default-filters

server:port: 9000
​
spring:cloud:gateway:default-filters:- AddRequestHeader=X-Request-Color, Default-Blueroutes:- id: my_routeuri: http://localhost:7070predicates:- Path=/info/header
​- id: my_routeuri: http://localhost:7070predicates:- Path=/info/headers

 

测试成功

自定义GatewayFilter

AddHeaderGatewayFilter.java

public class AddHeaderGatewayFilter implements GatewayFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request = exchange.getRequest().mutate().header("X-Request-Color", "filter-Red").build();ServerWebExchange webExchange = exchange.mutate().request(request).build();return chain.filter(webExchange);}
}

调用自定义的GatewayFilter

@Bean
public RouteLocator routeLocator(RouteLocatorBuilder builder){return builder.routes().route("my_router2",ps ->ps.path("/info/**").filters(fs->fs.filter(new AddHeaderGatewayFilter())).uri("http://localhost:7070")).build();
}

 

测试成功

多filter的运行

OneGateWayFilter.java

@Slf4j
public class OneGateWayFilter implements GatewayFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {long startTime = System.currentTimeMillis();log.info("oneFilter-pre:"+startTime);exchange.getAttributes().put("startTime",startTime);return chain.filter(exchange).then(Mono.fromRunnable(()->{log.info("oneFilter------post");Long startTimeAttr = (Long) exchange.getAttributes().get("startTime");long elaspedTime = System.currentTimeMillis() - startTimeAttr;log.info("所有过滤器执行的时间(毫秒)为:"+elaspedTime);}));}
}

TwoGateWayFilter.java

@Slf4j
public class TwoGateWayFilter implements GatewayFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("TwoFilter----pre");return chain.filter(exchange).then(Mono.fromRunnable(()->{log.info("TwoFilter------post");}));}
}

ThreeGateWayFilter.java

@Slf4j
public class ThreeGateWayFilter implements GatewayFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {log.info("ThreeFilter----pre");return chain.filter(exchange).then(Mono.fromRunnable(()->{log.info("ThreeFilter------post");}));}
}

 

测试结果

相关文章:

Spring Cloud Alibaba: Gateway 网关过滤器 GatewayGatewayFilter factory (记录)

目录 AddRequestHeader GatewayFilter factory AddRequestHeadersIfNotPresent GatewayFilter factory AddRequestParameter GatewayFilter Factory AddResponseHeader GatewayFilter Factory CircuitBreaker GatewayFilter factory circuit breaker based on the status…...

Windows Server 2016版本说明

Windows Server 2016 Essentials edition Windows Server 2016 Essentials版是专为小型企业而设计的。它对应于Windows Server的早期版本中的Windows Small Business Server。此版本最多可容纳25个用户和50台设备。它支持两个处理器内核和高达64GB的RAM。它不支持Windows Serve…...

车载红外夜视「升温」

红外夜视赛道&#xff0c;正在升温。 本周&#xff0c;全球车载后视镜头部供应商Gentex宣布&#xff0c;领投以色列热成像技术初创公司ADASKY&#xff0c;后者在B轮融资中拿到了3000万美元。按照计划&#xff0c;Gentex将协助ADASKY将红外夜视技术推向汽车市场。 事实上&#x…...

ext3 文件系统的特点、优缺点以及使用场景

ext3&#xff08;Third Extended File System&#xff09;是 ext2 文件系统的后续版本&#xff0c;它在 ext2 文件系统的基础上增加了日志功能&#xff0c;以提高文件系统的可靠性和稳定性。下面是 ext3 文件系统的特点、优缺点以及使用场景&#xff1a; 特点&#xff1a; ext…...

rk3568 修改开机logo

rk3568 修改开机显示logo Android 显示 logo 的作用是为了标识应用程序或设备的品牌和身份。在应用程序中&#xff0c;logo 可以帮助用户快速识别应用程序&#xff0c;并与其他应用程序区分开来。在设备中&#xff0c;logo 可以帮助用户识别设备的品牌和型号&#xff0c;以及与…...

golang实现关键路径算法

关键路径算法&#xff08;Critical Path Method&#xff0c;简称CPM&#xff09;是一种用于项目管理的技术&#xff0c;主要用于计算项目中的关键路径和关键活动。关键路径是指项目中的最长路径&#xff0c;决定了项目的最短完成时间。关键活动是指在关键路径上的活动&#xff…...

Overcoming catastrophic forgetting in neural networks

目录 预备知识&#xff1a; 论文笔记 1. Introduction 2. Elastic weight consolidation 2.1 EWC allows continual learning in a supervised learning context 2.2 EWC allows continual learning in a reinforcement learning context 3. Conclusion 文章链接&#x…...

[Linux] Linux文件系统

&#x1f941;作者&#xff1a; 华丞臧. &#x1f4d5;​​​​专栏&#xff1a;【LINUX】 各位读者老爷如果觉得博主写的不错&#xff0c;请诸位多多支持(点赞收藏关注)。如果有错误的地方&#xff0c;欢迎在评论区指出。 文章目录 一、Linux文件系统1.1 磁盘1.2 inode1.3 软硬…...

有仰拍相机和俯拍相机时,俯拍相机中心和吸嘴中心的标定

俯拍相机中心和吸嘴中心的标定 文章目录 俯拍相机中心和吸嘴中心的标定 前言适用模型如下&#xff1a;一、使用一个标定片进行标定1.关键注意&#xff1a;2.标定步骤&#xff1a; 二、使用一个L型的工件1.关键注意&#xff1a;2.标定步骤&#xff1a; 总结 前言 在自动化设备领…...

【Vue学习笔记5】Vue3中的响应式:ref和reactive、watchEffect和watch

所谓响应式就是界面和数据同步&#xff0c;能实现实时更新。 Vue 中用过三种响应式解决方案&#xff0c;分别是 defineProperty、Proxy 和 value setter。Vue 2 使用的方案是 defineProperty API。Vue3中使用的方案是Proxy和value setter。 1. ref和reactive vue3中实现响应…...

自动化测试工具的基本原理以及应用场景

自动化测试工具是现代软件开发流程中必不可少的组成部分&#xff0c;它可以通过编写脚本或使用图形用户界面工具自动化测试过程&#xff0c;提高测试的效率和准确性。本文将介绍自动化测试工具的基本原理以及应用场景。 自动化测试工具的基本原理 自动化测试工具通常采用的原理…...

《Java虚拟机学习》 java代码的运行过程

1. Java文件转换 当我们保存java文件后&#xff0c;首先由编译器编译成class文件&#xff0c;然后通过Java虚拟机将class文件转换成字节码文件 2.Java虚拟机是怎么运行Java文件 首先将java文件加载到java虚拟机中&#xff0c;然后由虚拟机将类元信息存储在 虚拟机的方法区中。…...

关于Intel处理器架构中AVX2里Gather特性的说明

在 Intel Haswell 架构里引入了 Gather 特性。它使得CPU可以使用向量索引存储器编址从存储器取非连续的数据元素。这些gather指令引入了一种新的存储器寻址形式&#xff0c;该形式由一个 基地址寄存器&#xff08;仍然是通用目的寄存器&#xff09;和通过一个 向量寄存器&#…...

UNIX常用命令(C站最全,一文通关)

unix常见命令列举如下&#xff0c;除了看还要会用&#xff1a; ls - 列出目录下的文件 cd - 切换目录 pwd - 显示当前目录 mkdir - 创建目录 rm - 删除文件或目录 rmdir - 删除空目录 cp - 复制文件或目录 mv - 移动文件或目录,或重命名 cat - 显示文件内容 less - 分…...

Vue监听属性详细讲解

文章目录 定义要监听的属性定义 watch修改监听的属性值监听数组变化监听对象变化监听计算属性变化监听事件变化监听路由变化 在 Vue 中&#xff0c;可以使用 watch/$watch 方法监听数据、计算属性、事件和路由的变化&#xff0c;从而实现数据绑定、事件监听和路由控制等功能。需…...

网申形式一览:这三种投递方式,你了解吗?

银行校招是个滚动的过程&#xff0c;每家银行的网申期并不一致。想要在看重的银行网申期投出一份漂亮的简历&#xff0c;简历自身要“过硬”。是不是还有同学不清楚网申简历形式&#xff1f; 从如信银行考试中心了解到&#xff0c;银行网申&#xff0c;尤其是大行网申&#xff…...

vue项目将多张图片生成一个gif动图

当前做项目有一个需求是将多张图片生成一个gif动图的形式 类似下面图片几张图片叠加生成一个gif动图 图片涉及工作隐私&#xff0c;就不公开啦 我们要引入一个gif.js的引入包&#xff0c;但是他没有直接引入的方式&#xff0c;只能从官方下载文件包&#xff0c;下载地址&#…...

开心档之Go 语言常量

Go 语言常量 常量是一个简单值的标识符&#xff0c;在程序运行时&#xff0c;不会被修改的量。 常量中的数据类型只可以是布尔型、数字型&#xff08;整数型、浮点型和复数&#xff09;和字符串型。 常量的定义格式&#xff1a; const identifier [type] value你可以省略类…...

动态库和静态库的使用

一、什么是库&#xff1f; 库是一种可执行代码的二进制形式&#xff0c;可以被操作系统载入内存执行。就是将源代码转化为二进制格式的源代码&#xff0c;相当于进行了加密&#xff0c;别人可以使用库&#xff0c;但是看不到库中的内容。 常见的库类型 共享库 静态库 动态库…...

前端:20 个常见的前端算法题

现在面试中&#xff0c;算法出现的频率越来越高了&#xff0c;大厂基本必考 今天给大家带来 20 个常见的前端算法题&#xff0c;重要的地方已添加注释&#xff0c;如有不正确的地方&#xff0c;欢迎多多指正 &#x1f495; 1、两数之和 题目&#xff1a; 给定一个数组 nums …...

k8s从入门到放弃之Ingress七层负载

k8s从入门到放弃之Ingress七层负载 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;Ingress是一个API对象&#xff0c;它允许你定义如何从集群外部访问集群内部的服务。Ingress可以提供负载均衡、SSL终结和基于名称的虚拟主机等功能。通过Ingress&#xff0c;你可…...

Day131 | 灵神 | 回溯算法 | 子集型 子集

Day131 | 灵神 | 回溯算法 | 子集型 子集 78.子集 78. 子集 - 力扣&#xff08;LeetCode&#xff09; 思路&#xff1a; 笔者写过很多次这道题了&#xff0c;不想写题解了&#xff0c;大家看灵神讲解吧 回溯算法套路①子集型回溯【基础算法精讲 14】_哔哩哔哩_bilibili 完…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

2025季度云服务器排行榜

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

短视频矩阵系统文案创作功能开发实践,定制化开发

在短视频行业迅猛发展的当下&#xff0c;企业和个人创作者为了扩大影响力、提升传播效果&#xff0c;纷纷采用短视频矩阵运营策略&#xff0c;同时管理多个平台、多个账号的内容发布。然而&#xff0c;频繁的文案创作需求让运营者疲于应对&#xff0c;如何高效产出高质量文案成…...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Mysql故障排插与环境优化

前置知识点 最上层是一些客户端和连接服务&#xff0c;包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念&#xff0c;为通过安全认证接入的客户端提供线程。同样在该层上可…...

k8s从入门到放弃之Pod的容器探针检测

k8s从入门到放弃之Pod的容器探针检测 在Kubernetes&#xff08;简称K8s&#xff09;中&#xff0c;容器探测是指kubelet对容器执行定期诊断的过程&#xff0c;以确保容器中的应用程序处于预期的状态。这些探测是保障应用健康和高可用性的重要机制。Kubernetes提供了两种种类型…...