Gateway--Filter、自定义全局过滤器

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,成功
在这里插入图片描述

发布了842 篇原创文章 · 获赞 2256 · 访问量 29万+

猜你喜欢

转载自blog.csdn.net/cold___play/article/details/104965175