springcloud-GateWay的Filter

 

 

   由于官方提供的路由过滤器太多,只能自己去查;下面是使用官方过滤器的用法:

  在实际开发中,用自己自定义的过滤器比较多;比如下面作为参考:

@Component
public class MyGlobalFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        String username = exchange.getRequest().getQueryParams().getFirst("username");

        if(username == null){
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }

        return chain.filter(exchange); //放行执行下一个过滤器,并把exchange交给下一个过滤器
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

  是实现一个全局的路由过滤器,需要实现两个接口:GlobalFilter, Ordered,然后覆盖两个方法:

    1. filter():当拦截请求时会执行的方法,跟之前的doFilter一样;但是参数和返回值就比较新颖了,是spring5后才提供的

      > ServerWebExchange:封装了request,response,session以及其他信息,简单的说就是请求常用相关的对象和数据的封装吧

      > Mono<T>:这个有点类似于 统一返回结果的类或接口,作用就是为了统一返回值的类型。

    2. getOrder():该方法是用来确定 过滤器 的执行顺序的,当返回值越小, 则过滤器的执行顺序越优先。

总结:一般在开发中,自定义全局路由过滤器会比较多,通常在过滤器里面做 日志记录 和 鉴权 会更多点。

posted @ 2021-02-25 14:25  爱编程DE文兄  阅读(326)  评论(0编辑  收藏  举报