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 生态系统提供了响应式编程能力,使得应用程序能够更好地适应现代的高并发和实时性需求。

相关推荐
luckywuxn3 分钟前
EurekaServer 工作原理
java·eureka
壹米饭5 分钟前
Java程序员学Python学习笔记一:学习python的动机与思考
java·后端·python
java金融8 分钟前
Java 锁升级机制详解
java
Young556611 分钟前
还不了解工作流吗(基础篇)?
java·workflow·工作流引擎
让我上个超影吧12 分钟前
黑马点评【缓存】
java·redis·缓存
ajassi200021 分钟前
开源 java android app 开发(十一)调试、发布
android·java·linux·开源
YuTaoShao35 分钟前
Java八股文——MySQL「存储引擎篇」
java·开发语言·mysql
crud40 分钟前
Java 中的 synchronized 与 Lock:深度对比、使用场景及高级用法
java
王德博客1 小时前
【Java课堂笔记】Java 入门基础语法与面向对象三大特性详解
java·开发语言
seventeennnnn1 小时前
Java大厂面试真题:谢飞机的技术挑战
java·spring boot·面试·aigc·技术挑战·电商场景·内容社区