說明: 創建了兩個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后執行了。
感覺不像是按照過濾請名稱排序的樣子。