返回
GateWay全局过滤器,原来可以这么玩
后端
2023-09-30 20:59:06
一、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);
}
}
四、总结
全局过滤器是一种非常强大的工具,可以帮助我们轻松实现一些通用的功能,如日志记录、跨域请求等。
全局过滤器与局部过滤器各有优缺点,在实际使用中,我们可以根据需要选择合适的过滤器类型。