返回

GateWay全局过滤器,原来可以这么玩

后端





一、GateWay全局过滤器和局部过滤器
上篇文章主要介绍了局部过滤器,需要在`application.yaml`文件中配置。

Spring Cloud Gateway提供了一种更简单的过滤器定义方式,就是全局过滤器。
全局过滤器不需要在`application.yaml`文件中配置,只需要在Spring上下文中定义一个`@Component`即可。

全局过滤器与局部过滤器的区别在于:

- 全局过滤器对所有的请求都生效,而局部过滤器只能对特定的路由生效。
- 全局过滤器可以定义在任何地方,而局部过滤器只能定义在路由配置中。

二、使用全局过滤器记录请求日志
使用全局过滤器记录请求日志非常简单,只需创建一个新的类并实现`GlobalFilter`接口即可。

```java
@Component
public class LoggingGlobalFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 记录请求信息
        logger.info("收到请求:{}", exchange.getRequest().getURI());

        // 放行请求
        return chain.filter(exchange);
    }
}

三、使用全局过滤器实现跨域请求
使用全局过滤器实现跨域请求也非常简单,只需创建一个新的类并实现GlobalFilter接口即可。

@Component
public class CorsGlobalFilter implements GlobalFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        // 设置允许跨域请求的请求头
        exchange.getResponse().getHeaders().add("Access-Control-Allow-Origin", "*");
        exchange.getResponse().getHeaders().add("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        exchange.getResponse().getHeaders().add("Access-Control-Allow-Headers", "Content-Type");

        // 放行请求
        return chain.filter(exchange);
    }
}

四、总结
全局过滤器是一种非常强大的工具,可以帮助我们轻松实现一些通用的功能,如日志记录、跨域请求等。

全局过滤器与局部过滤器各有优缺点,在实际使用中,我们可以根据需要选择合适的过滤器类型。