ZuulFilter 執行順序


說明: 創建了兩個Filter,分別是

PreFilter

public class PreFilter extends ZuulFilter {
    public PreFilter() {
        super();
    }
 
    @Override
    public String filterType() {
        return FilterConstants.PRE_TYPE;
    }
 
    @Override
    public int filterOrder() {
        return 0;
    }
 
    @Override
    public boolean shouldFilter() {
//        return true;
 
//跨域設置
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        //只過濾OPTIONS 請求
        if(request.getMethod().equals(RequestMethod.OPTIONS.name())){
 
            return true;
        }
        return false;
    }
 
    @Override
    public Object run() {
 
        RequestContext ctx = RequestContext.getCurrentContext();
        HttpServletRequest request = ctx.getRequest();
        HttpServletResponse response = ctx.getResponse();
 
        response.setHeader("Access-Control-Allow-Origin",request.getHeader("Origin"));
        response.setHeader("Access-Control-Allow-Credentials","true");
        response.setHeader("Access-Control-Allow-Headers","authorization, content-type");
        response.setHeader("Access-Control-Allow-Methods","POST,GET");
 
        String requestUrl = request.getRequestURL().toString();
        String requestUri = request.getRequestURI();
        String zuul = requestUrl.substring(0,requestUrl.indexOf(requestUri)); // zuul根路徑
        ctx.addZuulRequestHeader("zuul", zuul);
        //不再路由
        ctx.setSendZuulResponse(false);
        ctx.setResponseStatusCode(200);
 
        return null;
    }
    
    
    
}

PostFilter

@Component
public class PostFilter extends ZuulFilter {
    protected static final String SEND_ERROR_FILTER_RAN = "sendErrorFilter.ran";
 
    @Override
    public String filterType() {
        return FilterConstants.POST_TYPE;
    }
 
    @Override
    public int filterOrder() {
        return -1;
    }
 
    @Override
    public boolean shouldFilter() {
        return true;
    }
 
    @Override
    public Object run() {
 
        return null;
    }
}

我測試了幾種情況,發現結果如下


1  按照filterType決定順序

Pre 優先 Post執行,此時filterOrder沒有作用。

2 filterType相同

filterOrder有作用,數字越小,越先執行。(負數也是這個規則,0和-1的話,-1先執行)

3 相同filterType,相同filterOrder,都執行,執行順序不清楚。

prefilter先執行了,post后執行了。

感覺不像是按照過濾請名稱排序的樣子。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM