欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

深入理解Spring Cloud Zuul過(guò)濾器

 更新時(shí)間:2017年02月28日 08:18:01   作者:周立  
這篇文章主要給大家介紹了關(guān)于Spring Cloud Zuul過(guò)濾器的相關(guān)資料,通過(guò)閱讀本文您將了解:Zuul過(guò)濾器類型與請(qǐng)求生命周期、如何編寫(xiě)Zuul過(guò)濾器、如何禁用Zuul過(guò)濾器和Spring Cloud為Zuul編寫(xiě)的過(guò)濾器及其功能,需要的朋友可以參考下。

前言

過(guò)濾器是Zuul的核心組件,這篇文章我們來(lái)詳細(xì)討論Zuul的過(guò)濾器。下面話不多說(shuō),來(lái)看看詳細(xì)的介紹吧。

過(guò)濾器類型與請(qǐng)求生命周期

Zuul大部分功能都是通過(guò)過(guò)濾器來(lái)實(shí)現(xiàn)的。Zuul中定義了四種標(biāo)準(zhǔn)過(guò)濾器類型,這些過(guò)濾器類型對(duì)應(yīng)于請(qǐng)求的典型生命周期。

(1) PRE:這種過(guò)濾器在請(qǐng)求被路由之前調(diào)用。我們可利用這種過(guò)濾器實(shí)現(xiàn)身份驗(yàn)證、在集群中選擇請(qǐng)求的微服務(wù)、記錄調(diào)試信息等。

(2) ROUTING:這種過(guò)濾器將請(qǐng)求路由到微服務(wù)。這種過(guò)濾器用于構(gòu)建發(fā)送給微服務(wù)的請(qǐng)求,并使用Apache HttpClient或Netfilx Ribbon請(qǐng)求微服務(wù)。

(3) POST:這種過(guò)濾器在路由到微服務(wù)以后執(zhí)行。這種過(guò)濾器可用來(lái)為響應(yīng)添加標(biāo)準(zhǔn)的HTTP Header、收集統(tǒng)計(jì)信息和指標(biāo)、將響應(yīng)從微服務(wù)發(fā)送給客戶端等。

(4) ERROR:在其他階段發(fā)生錯(cuò)誤時(shí)執(zhí)行該過(guò)濾器。

除了默認(rèn)的過(guò)濾器類型,Zuul還允許我們創(chuàng)建自定義的過(guò)濾器類型。例如,我們可以定制一種STATIC類型的過(guò)濾器,直接在Zuul中生成響應(yīng),而不將請(qǐng)求轉(zhuǎn)發(fā)到后端的微服務(wù)。

Zuul請(qǐng)求的生命周期如圖8-5所示,該圖詳細(xì)描述了各種類型的過(guò)濾器的執(zhí)行順序。

Zuul請(qǐng)求的生命周期

編寫(xiě)Zuul過(guò)濾器

理解過(guò)濾器類型和請(qǐng)求生命周期后,我們來(lái)編寫(xiě)一個(gè)Zuul過(guò)濾器。編寫(xiě)Zuul的過(guò)濾器非常簡(jiǎn)單,我們只需繼承抽象類ZuulFilter,然后實(shí)現(xiàn)幾個(gè)抽象方法就可以了。

那么現(xiàn)在,我們來(lái)編寫(xiě)一個(gè)簡(jiǎn)單的Zuul過(guò)濾器,讓該過(guò)濾器打印請(qǐng)求日志。

(1) 復(fù)制項(xiàng)目microservice-gateway-zuul,將ArtifactId修改為microservice-gateway-zuul-filter。

(2) 編寫(xiě)自定義Zuul過(guò)濾器

public class PreRequestLogFilter extends ZuulFilter {
 private static final Logger LOGGER = LoggerFactory.getLogger(PreRequestLogFilter.class);
 @Override
 public String filterType() {
 return "pre";
 }
 @Override
 public int filterOrder() {
 return 1;
 }
 @Override
 public boolean shouldFilter() {
 return true;
 }
 @Override
 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需實(shí)現(xiàn)以下幾個(gè)方法:

  1. filterType:返回過(guò)濾器的類型。有pre、route、post、error等幾種取值,分別對(duì)應(yīng)上文的幾種過(guò)濾器。詳細(xì)可以參考com.netflix.zuul.ZuulFilter.filterType() 中的注釋。
  2. filterOrder:返回一個(gè)int值來(lái)指定過(guò)濾器的執(zhí)行順序,不同的過(guò)濾器允許返回相同的數(shù)字。
  3. shouldFilter:返回一個(gè)boolean值來(lái)判斷該過(guò)濾器是否要執(zhí)行,true表示執(zhí)行,false表示不執(zhí)行。
  4. run:過(guò)濾器的具體邏輯。本例中,我們讓它打印了請(qǐng)求的HTTP方法以及請(qǐng)求的地址。

(2) 修改啟動(dòng)類,為啟動(dòng)類添加以下內(nèi)容:

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

測(cè)試

(1) 啟動(dòng)microservice-discovery-eureka。

(2) 啟動(dòng)microservice-provider-user。

(3) 啟動(dòng)microservice-gateway-zuul-filter。

(4) 訪問(wèn)http://localhost:8040/microservice-provider-user/1 ,可獲得類似如下的日志。

[nio-8040-exec-6] c.i.c.s.filters.pre.PreRequestLogFilter : send GET request to http://localhost:8040//microservice-provider-user/1

說(shuō)明我們編寫(xiě)的自定義Zuul過(guò)濾器被執(zhí)行了。

禁用Zuul過(guò)濾器

Spring Cloud默認(rèn)為Zuul編寫(xiě)并啟用了一些過(guò)濾器,例如DebugFilter、FormBodyWrapperFilter、PreDecorationFilter等。這些過(guò)濾器都存放在spring-cloud-netflix-core這個(gè)Jar包的org.springframework.cloud.netflix.zuul.filters包中。

一些場(chǎng)景下,我們想要禁用掉部分過(guò)濾器,此時(shí)該怎么辦呢?

答案非常簡(jiǎn)單,只需設(shè)置zuul.<SimpleClassName>.<filterType>.disable=true ,即可禁用SimpleClassName所對(duì)應(yīng)的過(guò)濾器。以過(guò)濾器org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter為例,只需設(shè)置zuul.SendResponseFilter.post.disable=true ,即可禁用該過(guò)濾器。

同理,如果想要禁用《編寫(xiě)Zuul過(guò)濾器》一節(jié)編寫(xiě)的過(guò)濾器,只需設(shè)置zuul.PreRequestLogFilter.pre.disable=true 即可。

TPS

(1) 相關(guān)代碼com.netflix.zuul.ZuulFilter.disablePropertyName() 、com.netflix.zuul.ZuulFilter.isFilterDisabled() 、com.netflix.zuul.ZuulFilter.runFilter() 。

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流。

相關(guān)文章

  • Java MAVEN 工程pom配置報(bào)錯(cuò)解決方案

    Java MAVEN 工程pom配置報(bào)錯(cuò)解決方案

    這篇文章主要介紹了Java MAVEN 工程pom配置報(bào)錯(cuò)解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java設(shè)計(jì)模塊系列之書(shū)店管理系統(tǒng)單機(jī)版(一)

    Java設(shè)計(jì)模塊系列之書(shū)店管理系統(tǒng)單機(jī)版(一)

    這篇文章主要為大家詳細(xì)介紹了Java單機(jī)版的書(shū)店管理系統(tǒng)設(shè)計(jì)模塊和思想第一章,感興趣的小伙伴們可以參考一下
    2016-08-08
  • Spring中的事務(wù)傳播行為示例詳解

    Spring中的事務(wù)傳播行為示例詳解

    這篇文章主要給大家介紹了關(guān)于Spring中事務(wù)傳播行為的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Spring具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 教你用JDK編譯Java文件的方法

    教你用JDK編譯Java文件的方法

    這篇文章主要介紹了教你用JDK編譯Java文件的方法,分步驟給大家介紹了設(shè)置環(huán)境變量的方法,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-01-01
  • java arrayList遍歷的四種方法及Java中ArrayList類的用法

    java arrayList遍歷的四種方法及Java中ArrayList類的用法

    arraylist是動(dòng)態(tài)數(shù)組,它具有三個(gè)好處分別是:動(dòng)態(tài)的增加和減少元素 、實(shí)現(xiàn)了ICollection和IList接口、靈活的設(shè)置數(shù)組的大小,本文給大家介紹java arraylist遍歷及Java arraylist 用法,感興趣的朋友一起學(xué)習(xí)吧
    2015-11-11
  • java面試常見(jiàn)模式問(wèn)題---代理模式

    java面試常見(jiàn)模式問(wèn)題---代理模式

    代理模式是常用的java設(shè)計(jì)模式,他的特征是代理類與委托類有同樣的接口,代理類主要負(fù)責(zé)為委托類預(yù)處理消息、過(guò)濾消息、把消息轉(zhuǎn)發(fā)給委托類,以及事后處理消息
    2021-06-06
  • Java設(shè)計(jì)模式之適配器模式簡(jiǎn)介

    Java設(shè)計(jì)模式之適配器模式簡(jiǎn)介

    這篇文章主要介紹了Java設(shè)計(jì)模式之適配器模式,需要的朋友可以參考下
    2014-07-07
  • Java微信公眾平臺(tái)開(kāi)發(fā)(4) 回復(fù)消息的分類及實(shí)體的創(chuàng)建

    Java微信公眾平臺(tái)開(kāi)發(fā)(4) 回復(fù)消息的分類及實(shí)體的創(chuàng)建

    這篇文章主要為大家詳細(xì)介紹了Java微信公眾平臺(tái)開(kāi)發(fā)第四步,回復(fù)消息的分類及實(shí)體的創(chuàng)建,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 關(guān)于Java下奇怪的Base64詳解

    關(guān)于Java下奇怪的Base64詳解

    這篇文章主要給大家介紹了關(guān)于Java下奇怪的Base64的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)

    Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了Java基于控制臺(tái)界面實(shí)現(xiàn)ATM系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05

最新評(píng)論