Spring Cloud --zuul搭建 之 自定義 filter
阿新 • • 發佈:2018-11-22
上篇文章已經介紹了,zuul基本的搭建,這篇文章 介紹一下自定義 Filter
首先 在 Zuul 模組中 新增加 兩個java 類
zuul1Filter 內容如下:
package com.springcloud.zuul.filter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; /** * Created by joe強 on 2018/9/27 17:26 */ @Component public class Zuul1Filter extends com.netflix.zuul.ZuulFilter { @Override public String filterType() { return "pre"; //filterType: 表示過濾型別 列舉值:pre 表示路由之前,routing表示路由當中,post表示路由之後,error 表示路由發生錯誤 } @Override public int filterOrder() { return 1; } //優先順序,0是最高優先順序即最先執行 @Override public boolean shouldFilter() { return true; //寫邏輯,是否要執行過濾。true會執行run函式,false不會執行 } @Override public Object run() throws ZuulException { System.out.println("\"----------------this is DemoFilter----------\""); RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); System.out.println(String.format("%s %s", request.getMethod(), request.getRequestURL().toString())); Object accessToken = request.getParameter("token"); if (accessToken == null) { //判斷釋放有token自動 logger.warn("token is empty"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is empty"); }catch (Exception e){} return null; } return null; } System.out.println("token is empty"); ctx.setSendZuulResponse(false); ctx.setResponseStatusCode(401); try { ctx.getResponse().getWriter().write("token is empty"); } catch (Exception e) { System.out.println(e.getMessage()); } return null; } return null; } }
zuul2Filter 內容:
package com.springcloud.zuul.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.exception.ZuulException; import org.springframework.stereotype.Component; /** * Created by joe強 on 2018/9/27 17:33 */ @Component public class Zuul21Filter extends ZuulFilter { @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 0; //優先順序,0是最高優先順序 即最高執行 } @Override public boolean shouldFilter() { return true; } @Override public Object run() throws ZuulException { System.out.println("執行 Zuul2Filter"); return "this is Zuul2Filter"; } }
啟動 Euaeka 註冊中心,server1服務 和當前Zuul 閘道器
呼叫介面:
說明自定義過濾器已經生效了!
看下控制檯輸出
可以看的出來 優先順序也生效了!