1. 程式人生 > >微服務springcloud—zuul的過濾器的編寫和禁用

微服務springcloud—zuul的過濾器的編寫和禁用

Zuul的過濾器

過濾器是Zuul的核心元件。

過濾器型別與請求生命週期

PRE:這種過濾器在請求被路由之前呼叫。可利用這種過濾器實現 身份驗證、在叢集中選擇請求的微服務、記錄除錯資訊等。 ROUTHING: 這種過濾器將請求路由到微服務。這總過濾器用於構建傳送給 微服務的請求,並使用Apache HttpClient或Netfilx Ribbon請求微服務。 POST:這種過濾器在路由到微服務以後執行。這種過濾器用來為響應新增標準的 HTTP Header、收集統計資訊和指標、將響應從微服務傳送給客戶端等。 ERROR:在其他階段發生錯誤時執行該過濾器。

編寫過濾器

1.複製專案microservice-gateway-zuul,將ArtifactId修改為 microservice-gateway-zuul-filter。 2.編寫自定義Zuul過濾器

public class PreRequestLogFilter  extends ZuulApplication {
    private static final Logger LOGGER = LoggerFactory.getLogger(PreRequestLogFilter.class);


    public String filterType() {
        return "pre";
    }


    public int filterOrder() {
        return 1;
    }


    public boolean shouldFilter
() { return true; } public Object run() { RequestContext ctx = RequestContext.getCurrentContext(); HttpServletRequest request = ctx.getRequest(); PreRequestLogFilter.LOGGER.info(String.format("send%s request to %s", request.getMethod(), request.getRequestURL(
).toString())); return null; } }

由此可知,自定義的Zuul Filter需實現以下幾個方法。 filterType:返回過濾器型別。有pre、route、post、error等幾種取值。 filterOrder:返回一個int值來指定過濾器的執行順序,不同的過濾器允許返回相同的數字。 shouldFilter:返回一個boolean值來判斷該過濾器是否要執行,true表示執行,false表示不執行。 run:過濾器的具體邏輯,本例讓他列印了請求的HTTP方法以及請求的地址。

3.修改啟動類,為啟動類新增以下內容

    @Bean
    public PreRequestLogFilter preRequestLogFilter(){
        return new PreRequestLogFilter();
    }

4.測試 啟動專案microservice-discovery-eureka。 啟動專案microservice-provider-user。 啟動專案microservice-gateway-zuul-filter。 訪問http://localhost:8040/users/1,可獲得如下日誌: 在這裡插入圖片描述

禁用Zuul過濾器

Spring Cloud預設為Zuul編寫了一些過濾器。 一些場景下,想要禁用掉部分過濾器,該怎麼辦呢? 答案很簡單,只需設定zuul.SendResponseFilter.post.disable=true, 即可禁用該過濾器。 如果想要禁用自己編寫的自定義過濾器只須zuul.preRequestLogFilter.pre.disable = true即可。

本文大部分內容轉載自周立的《Spring Cloud與Docker微服務架構實戰》