Spring Cloud全解析:网关之zuul过滤器

2024-08-25  本文已影响0人  墨线宝

zuul过滤器

zuul有四种类型的过滤器

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    try {
        init((HttpServletRequest) servletRequest, (HttpServletResponse) servletResponse);
        try {
            preRouting();
        } catch (ZuulException e) {
            error(e);
            postRouting();
            return;
        }
        
        // Only forward onto to the chain if a zuul response is not being sent
        if (!RequestContext.getCurrentContext().sendZuulResponse()) {
            filterChain.doFilter(servletRequest, servletResponse);
            return;
        }
        
        try {
            routing();
        } catch (ZuulException e) {
            error(e);
            postRouting();
            return;
        }
        try {
            postRouting();
        } catch (ZuulException e) {
            error(e);
            return;
        }
    } catch (Throwable e) {
        error(new ZuulException(e, 500, "UNCAUGHT_EXCEPTION_FROM_FILTER_" + e.getClass().getName()));
    } finally {
        RequestContext.getCurrentContext().unset();
    }
}

自定义过滤器

继承ZuulFilter抽象类

// 过滤器类型,pre、route、post、error
abstract public String filterType();

// 过滤器的执行顺序
abstract public int filterOrder();

// 是否需要执行
boolean shouldFilter();

// 执行逻辑
Object run();

禁用某种过滤器

zuul默认会启用一些过滤器,如servletDetectionFilter、formBodyWrapperFilter、debugFilter等

zuul:
    DebugFilter: # 过滤器类的名字
        pre: # 类型
            disable: true

https://zhhll.icu/2021/框架/微服务/springcloud/网关/zuul/2.zuul过滤器/

上一篇 下一篇

猜你喜欢

热点阅读