Zuul(ZuulFilter)過濾器的關鍵特性有:java
@Component public class MyZuulFilterPre extends ZuulFilter { private static Logger log = LoggerFactory.getLogger(MyZuulFilterPre.class); //filterType:返回一個字符串表明過濾器的類型 @Override public String filterType() { return FilterConstants.PRE_TYPE; //pre:路由以前 route:路由之時 post: 路由以後 error:發送錯誤調用 } //filterOrder:過濾的順序 @Override public int filterOrder() { return 0; } //這裏能夠寫邏輯判斷,是否要過濾,本文true,永遠過濾 @Override public boolean shouldFilter() { return true; } //過濾器的具體邏輯。判斷該請求到底有沒有權限訪問。 @Override public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); log.info(String.format("%s >>> %s", request.getMethod(), request.getRequestURL().toString())); Object accessToken = request.getParameter("token"); if (accessToken == null) { log.warn("token is empty"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is empty"); } catch (Exception e) { } return null; } log.info("ok"); return null; } }
測試結果:app
Zuul中定義了四種標準的過濾器類型,這些過濾器類型對應於請求的典型生命週期。ide
PRE
過濾器: 在請求被路由以前調用, 可用來實現身份驗證、在集羣中選擇請求的微服務、記錄調試信息等;ROUTING
過濾器: 在路由請求時候被調用;POST
過濾器: 在路由到微服務之後執行, 可用來爲響應添加標準的HTTP Header、收集統計信息和指標、將響應從微服務發送給客戶端等;ERROR
過濾器: 在處理請求過程時發生錯誤時被調用。除了上面給出的四種默認的過濾器類型以外,Zuul還容許咱們建立自定義的過濾器類型。(暫沒嘗試)微服務
只須要在application.properties(或yml)中配置須要禁用的filter,格式爲:zuul.[filter-name].[filter-type].disable=true
post
zuul.MyZuulFilterPre.pre.disable=true
連接:https://www.jianshu.com/p/f786a11a2def
來源:簡書測試