Filter的使用


Filter的使用

是什么

  • 路由过滤器可用于修改进入的HTTP请求和返回的HTTP响应,路由过滤器只能指定路由进行使用。
  • Spring Cloud Gateway内置了多种路由过滤器,他们由 Gateway Filter的工厂类来产生

Spring Cloud Gateway的Filter

生命周期只有pre(在业务逻辑之前)、post(在业务逻辑之后)

种类只有GatewayFilter(单一)、GlobalFilter(全局)

常用的GatewayFilter

因为有31种之多,并且一般都是用的自定义的filter,所以这里只举例怎么去使用。
在这里插入图片描述


自定义过滤器

主要是要实现两个接口 GlobalFilter ,Ordered

在这里插入图片描述


/**
 * 自定义全局GlobalFilter
 */
@Component
@Slf4j
public class MyLogGateWayFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        log.info("*********come in MyLogGateWayFilter: "+new Date());
        /**
         * 要求请求必须带有参数username且值不能为空
         * 例如:http://localhost:9527/payment/lb?username=w(这是正确的)
         */
        String username = exchange.getRequest().getQueryParams().getFirst("username");
        if(StringUtils.isEmpty(username)){
            log.info("*****用户名为Null 非法用户,(┬_┬)");
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);//给人家一个回应
            return exchange.getResponse().setComplete();
        }
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 0;//过滤链顺序  数字越小 越先
    }
}

测试

1、启动在这里插入图片描述

2、访问http://localhost:9527/payment/lb\?username=z3这是正确的

3、http://localhost:9527/payment/lb\?me=z3这是错误的,因为没有username。


文章作者: fFee-ops
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 fFee-ops !
评论
  目录