SpringCloud 组件Gateway服务网关【全局过滤器】
在Spring Cloud Gateway中,可以通过实现GlobalFilter
接口来创建一个全局过滤器。全局过滤器会应用于所有路由。以下是一个简单的全局过滤器示例,它会在请求被路由前和响应被发送回客户端后记录日志:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
public class LoggingFilter implements GlobalFilter, Ordered {
private Logger logger = LoggerFactory.getLogger(LoggingFilter.class);
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
long startTime = System.currentTimeMillis();
return chain.filter(exchange)
.then(Mono.fromRunnable(() -> {
long endTime = System.currentTimeMillis();
this.logger.info("请求URI: {},耗时: {}ms", exchange.getRequest().getURI(), endTime - startTime);
}));
}
@Override
public int getOrder() {
// 确保这个过滤器是在其他过滤器之前
return -1;
}
}
在上述代码中,LoggingFilter
类实现了GlobalFilter
接口,并定义了filter
方法来记录请求的URI和处理时间。getOrder()
方法返回的整数值代表了过滤器的执行顺序,返回-1意味着这是最高优先级的过滤器,将会最先执行。
要将这个全局过滤器注册到Spring Cloud Gateway中,可以将其定义为Spring的Bean:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class GatewayConfig {
@Bean
public LoggingFilter loggingFilter() {
return new LoggingFilter();
}
}
这样配置后,每次请求通过Spring Cloud Gateway时都会经过这个日志记录过滤器。
评论已关闭