自定义GlobalFilter

有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top

全网最细面试题手册,支持艾宾浩斯记忆法。这是一份最全面、最详细、最高质量的 java面试题,不建议你死记硬背,只要每天复习一遍,有个大概印象就行了。 https://store.amazingmemo.com/chapterDetail/1685324709017001`

定义全局过滤器需要实现GlobalFilter,Ordered接口:

GlobalFilter:过滤器拦截处理方法

Ordered:过滤器也有多个,这里主要定义过滤器执行顺序,里面有个方法getOrder()会返回过滤器执行顺序,返回值越小,越靠前执行

需求

我们创建全局过滤器并完成常见业务用户权限校验,如果请求中有带有一个名字为token的请求参数,则认为请求有效放行,如果没有则拦截提示授权无效。

创建全局过滤器:com.itheima.filter.RouterFilter,代码如下:

@Component

public class RouterFilter implements GlobalFilter,Ordered {

    /***

     * 路由拦截

     * @param exchange

     * @param chain

     * @return

     */

    @Override

    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {

        log.info("RouterFilter----------------");

        //获取请求参数

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

        //如果token为空,则表示没有登录

        if(StringUtils.isEmpty(token)){

            //没登录,状态设置403

            exchange.getResponse().setStatusCode(HttpStatus.PAYLOAD_TOO_LARGE);

            //结束请求

            return exchange.getResponse().setComplete();

        }

        //放行

        return chain.filter(exchange);

    }

    /***

     * 拦截器顺序

     * @return

     */

    @Override

    public int getOrder() {

        return 0;

    }

}

最后更新于