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

相关推荐
laplace01231 天前
Java八股—MySQL
java·mysql·oracle
熙客1 天前
TiDB:分布式关系型数据库
java·数据库·分布式·tidb
你想考研啊1 天前
linux安装jdk和tomcat和并自启动
java·linux·tomcat
悟能不能悟1 天前
java的java.sql.Date和java.util.Date的区别,应该怎么使用
java·开发语言
高山上有一只小老虎1 天前
java 正则表达式大全
java·正则表达式
_院长大人_1 天前
设计模式-工厂模式
java·开发语言·设计模式
凌波粒1 天前
MyBatis完整教程IDEA版(2)--ResultMap/注解/一对多/多对一/lombok/log4j
java·intellij-idea·mybatis
蓝-萧1 天前
【玩转全栈】----Django基本配置和介绍
java·后端
priority_key1 天前
排序算法:堆排序、快速排序、归并排序
java·后端·算法·排序算法·归并排序·堆排序·快速排序
汤姆yu1 天前
基于SpringBoot的动漫周边商场系统的设计与开发
java·spring boot·后端