Spring Cloud GateWay 全局过滤器

java 复制代码
public class CustomGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("custom global filter");
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return -1;
    }
}

全局过滤器是什么?

这是一个自定义的 Spring Cloud Gateway 全局过滤器(Global Filter)。在 Spring Cloud Gateway 中,全局过滤器可以在请求被路由到目标服务之前或之后执行一些操作。这个过滤器实现了 GlobalFilter 接口和 Ordered 接口,这两个接口的作用如下:

  1. GlobalFilter 接口: 这是一个 Spring Cloud Gateway 提供的接口,用于定义全局过滤器。全局过滤器能够处理进入网关的请求和返回的响应。在这个自定义过滤器中,filter 方法被实现,它接收 ServerWebExchange 对象和 GatewayFilterChain 对象作为参数。在这个方法内部,你可以编写逻辑来处理请求,然后调用 chain.filter(exchange) 继续执行后续过滤器链和路由操作。

  2. Ordered 接口: 这是 Spring Framework 提供的接口,用于确定对象的顺序。在 Spring Cloud Gateway 中,过滤器的执行顺序非常重要,可以通过实现 Ordered 接口的 getOrder() 方法来定义过滤器的顺序。在这个例子中,过滤器的顺序被设置为 -1,这表示这个过滤器将在所有默认顺序为 0 的过滤器之前执行。

总结起来,这个自定义全局过滤器会在请求进入 Spring Cloud Gateway 时被调用,在日志中打印 "custom global filter",然后继续执行后续过滤器链和路由操作。由于实现了 Ordered 接口并返回 -1,这个过滤器将会在默认的全局过滤器之前被执行。

什么是ServerWebExchange

ServerWebExchange 是 Spring WebFlux 中的一个核心接口,它代表了一个服务器端的 HTTP 交换过程,包含了客户端请求和服务器响应的各种信息。在 Spring Cloud Gateway 或 Spring WebFlux 应用中,它被广泛用于处理和操作 HTTP 请求和响应。

ServerWebExchange 接口提供了许多方法,用于获取和操作与 HTTP 请求和响应相关的信息,包括:

  • getRequest(): 获取代表客户端请求的 ServerRequest 对象,可以从中获取请求方法、URI、请求头、请求参数等信息。

  • getResponse(): 获取代表服务器响应的 ServerResponse 对象,可以从中设置响应状态码、响应头、响应体等信息。

  • getAttributes(): 获取一个属性的键值对集合,可以用于在不同的过滤器之间共享数据。

  • mutate(): 复制当前的 ServerWebExchange 并进行修改,用于创建一个新的 ServerWebExchange 对象。

  • getPrincipal(): 获取当前用户的身份信息,通常用于鉴权和认证。

  • getFormData(): 获取表单数据,通常在 POST 请求中解析表单数据。

在自定义过滤器、处理器函数和其他与请求响应处理相关的地方,你可以使用 ServerWebExchange 对象来获取和操作与请求响应相关的信息。这个接口的灵活性使得你能够在 Spring WebFlux 应用中进行各种自定义的处理和操作。

什么是Spring WebFlux?

Spring WebFlux 是 Spring Framework 的一个模块,用于构建响应式(Reactive)的 Web 应用程序。与传统的基于 Servlet 的 Spring MVC 不同,Spring WebFlux 基于反应式编程模型,旨在处理高并发、高吞吐量的场景,以及需要实时性和低延迟的应用程序。

反应式编程是一种面向数据流和变化传播的编程范式,其核心概念是异步数据流和非阻塞操作。在 Spring WebFlux 中,你可以使用响应式流库(如 Reactor)来处理数据流,使得应用程序能够更有效地利用资源,并且能够应对大量的并发请求。

Spring WebFlux 提供了两种编程模型:

  1. 注解式模型: 类似于传统的 Spring MVC,你可以使用注解来定义处理器函数(Handler Functions),并且可以使用像 @RequestMapping 这样的注解来映射请求。

  2. 函数式模型: 使用函数式编程的方式定义处理器函数,这种方式更加灵活,可以更好地与响应式编程模型结合。

Spring WebFlux 可以用于构建多种类型的 Web 应用程序,包括传统的 Web 应用程序、RESTful API、实时推送、反应式流式处理等。它也是构建 Spring Cloud Gateway 这样的微服务网关的基础。总之,Spring WebFlux 为 Spring 生态系统提供了响应式编程能力,使得应用程序能够更好地适应现代的高并发和实时性需求。

相关推荐
Javatutouhouduan1 分钟前
Java程序员如何深入学习JVM底层原理?
java·jvm·java面试·后端开发·java架构师·java程序员·互联网大厂
王嘉俊92510 分钟前
设计模式--享元模式:优化内存使用的轻量级设计
java·设计模式·享元模式
2301_803554521 小时前
C++联合体(Union)详解:与结构体的区别、联系与深度解析
java·c++·算法
EnCi Zheng1 小时前
SpringBoot 配置文件完全指南-从入门到精通
java·spring boot·后端
烙印6011 小时前
Spring容器的心脏:深度解析refresh()方法(上)
java·后端·spring
为什么我不是源代码1 小时前
JPA读取数据库离谱问题-No property ‘selectClassByName‘ found-Not a managed type
java·sql
Lisonseekpan2 小时前
Guava Cache 高性能本地缓存库详解与使用案例
java·spring boot·后端·缓存·guava
我真的是大笨蛋2 小时前
Redis的String详解
java·数据库·spring boot·redis·spring·缓存
心态特好2 小时前
Jwt非对称加密的应用场景
java
敢敢J的憨憨L2 小时前
GPTL(General Purpose Timing Library)使用教程
java·服务器·前端·c++·轻量级计时工具库