GatewaFilter Factories
路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤只能指定路由进行使用。
SpringCloud Gateway 内置了多种路由过滤器,他们都由GatewayFilter的工厂类来产生。
生命周期:
- pre(前置)
- post(后置)
种类:
- GatewayFilter
- GlobalFilter
自定义全局过滤器
需要实现ClogbalFilter、Ordered接口。
@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
log.info("*******come in MyLogGateWayFilter: " + new Date());
String uname = exchange.getRequest().getQueryParams().getFirst("uname");
if (uname == null) {
log.info("*******用户名为null,非法用户");
exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
return exchange.getResponse().setComplete();
}
return chain.filter(exchange);
}
//返回加载过滤器的顺序,值越小越优先
@Override
public int getOrder() {
return 0;
}
}
启动Eureka,8001、8002和gateway网关:
访问:localhost:9527/payment/lb
,失败,未携带uname
访问:localhost:9527/payment/lb?uname=acton
,成功