教你在Zuul中增加Filter過濾請求


轉自:http://www.imooc.com/article/295172

教你在Zuul中增加Filter過濾請求

2019.11.08 17:32 2716瀏覽
 

上一篇中,我們介紹了如何使用Zuul反向代理請求,這一篇我們介紹如何在Zuul中增加Filter來過濾請求,我們的示例也是延用上一篇的示例,沒有看過上一篇的小伙伴們,請先閱讀上一篇教你使用Zuul反向代理訪問微服務

Zuul過濾器

Zuul的過濾器有4中標准的類型,分別如下:

  • pre:在請求被轉發之前,執行過濾器
  • **route:**過濾器可以處理實際的請求轉發
  • post:在請求被轉發之后,執行過濾器
  • error:在請求被轉發時發生錯誤,執行過濾器

我們將會寫一個“pre”類型的過濾器,給大家示例,其他類型的過濾器大同小異,大家可以私下自己練習。

ZuulFilter

首先我們要創建一個Filter繼承ZuulFilter,並在Spring的配置中實例化這個Bean。具體如下:

public class SimpleFilter extends ZuulFilter { @Override public String filterType() { return "pre"; } @Override public int filterOrder() { return 1; } @Override public boolean shouldFilter() { return true; } @Override public Object run() throws ZuulException { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); System.out.println(String.format("Zuul的pre類型過濾器 : %s request to %s", request.getMethod(), request.getRequestURL().toString())); return null; } } 
  • filterType()方法返回的是過濾器的類型,這里我們返回的“pre”,說明過濾器的類型是“pre”類型。
  • filterOrder() 返回的是過濾器的執行順序,當有多個過濾器時,這個值將決定過濾器的執行順序。
  • shouldFilter() 返回true或false,標識着這個過濾器是否執行。當然我們可以在這個方法中增加一些邏輯,當滿足某些條件時,執行這個過濾器。
  • run() 方法是過濾器的具體執行方法。

啟動類中實例化Filter

過濾器的類我們已經寫好了,接下來,我們在啟動類中,用java config的方式配置這個類,如下:

@SpringBootApplication @EnableZuulProxy public class ZuulApplication { public static void main(String[] args) { SpringApplication.run(ZuulApplication.class, args); } @Bean public ZuulFilter simpleFilter(){ return new SimpleFilter(); } } 

下面我們啟動微服務和Zuul反向代理兩個應用,如果你不知道微服務是哪個應用,請參考上一篇教你使用Zuul反向代理訪問微服務。然后我們在瀏覽器中訪問http://localhost:8080/micro/hello,顯示結果如下:

圖片描述

說明請求已經轉發成功了,我們再看看Zuul服務的后台日志:

圖片描述

我們過濾器的日志也打印出來了。

總結

通過Zuul的過濾器,我們可以在轉發的過程中增加一些業務操作,比如請求次數的統計等。今天就給大家介紹到這里,有問題評論區留言哦~~


免責聲明!

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



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