1. <nobr id="easjo"><address id="easjo"></address></nobr>

      <track id="easjo"><source id="easjo"></source></track>
      1. 
        

      2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
      3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>
          貴州做網站公司
          貴州做網站公司~專業!靠譜!
          10年網站模板開發經驗,熟悉國內外開源網站程序,包括DEDECMS,WordPress,ZBlog,Discuz! 等網站程序,可為您提供網站建設,網站克隆,仿站,網頁設計,網站制作,網站推廣優化等服務。我們專注高端營銷型網站,企業官網,集團官網,自適應網站,手機網站,網絡營銷,網站優化,網站服務器環境搭建以及托管運維等。為客戶提供一站式網站解決方案?。?!

          語言過濾器(SpringCloud Gateway自帶的全局過濾器GlobalFilter是怎樣的)

          來源:互聯網轉載 時間:2024-05-08 09:13:00

          全局過濾器作用于所有的路由,不需要單獨配置,我們可以用它來實現很多統一化處理的業務需求,比如權限認證、IP 訪問限制等。

          接口定義類 org.springframework.cloud.gateway.filter.GlobalFilter,具體代碼如下所示。

          publicinterfaceGlobalFilter{Mono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain);}

          SpringCloudGateway 自帶的 GlobalFilter 實現類有很多,如圖 1 所示。

          有轉發、路由、負載等相關的 GlobalFilter,感興趣的朋友可以去看下源碼自行了解。我們如何通過定義 GlobalFilter 來實現我們的業務邏輯?

          這里給出一個官方文檔上的案例,代碼如下所示。

          @ConfigurationpublicclassExampleConfiguration{privateLoggerlog=LoggerFactory.getLogger(ExampleConfiguration.class);@Bean@Order(-1)publicGlobalFiltera(){return(exchange,chain)->{log.info("firstprefilter");returnchain.filter(exchange).then(Mono.fromRunnable(()->{log.info("thirdpostfilter");}));};}@Bean@Order(0)publicGlobalFilterb(){return(exchange,chain)->{log.info("secondprefilter");returnchain.filter(exchange).then(Mono.fromRunnable(()->{log.info("secondpostfilter");}));};}@Bean@Order(1)publicGlobalFilterc(){return(exchange,chain)->{log.info("thirdprefilter");returnchain.filter(exchange).then(Mono.fromRunnable(()->{log.info("firstpostfilter");}));};}}

          上面定義了 3 個 GlobalFilter,通過@Order來指定執行的順序,數字越小,優先級越高。下面就是輸出的日志,從日志就可以看出執行的順序,如下所示。

          2019-8-2616:08:52.406INFO55062---[ioEventLoop-4-1]c.c.gateway.config.ExampleConfiguration:firstprefilter2019-8-2616:08:52.406INFO55062---[ioEventLoop-4-1]c.c.gateway.config.ExampleConfiguration:secondprefilter2019-8-2616:08:52.407INFO55062---[ioEventLoop-4-1]c.c.gateway.config.ExampleConfiguration:thirdprefilter2019-8-2616:08:52.437INFO55062---[ctor-http-nio-7]c.c.gateway.config.ExampleConfiguration:firstpostfilter2019-8-2616:08:52.438INFO55062---[ctor-http-nio-7]c.c.gateway.config.ExampleConfiguration:secondpostfilter2019-8-2616:08:52.438INFO55062---[ctor-http-nio-7]c.c.gateway.config.ExampleConfiguration:thirdpostfilter

          當 GlobalFilter 的邏輯比較多時,筆者還是推薦大家單獨寫一個 GlobalFilter 來處理,比如我們要實現對 IP 的訪問限制,即不在 IP 白名單中就不能調用的需求。

          單獨定義只需要實現 GlobalFilter、Ordered 兩個接口就可以了,具體代碼如下所示。

          @ComponentpublicclassIPCheckFilterimplementsGlobalFilter,Ordered{@OverridepublicintgetOrder(){return0;}@OverridepublicMono<Void>filter(ServerWebExchangeexchange,GatewayFilterChainchain){HttpHeadersheaders=exchange.getRequest().getHeaders();//此處寫得非常絕對,只作演示用,實際中需要采取配置的方式if(getIp(headers).equals("127.0.0.1")){ServerHttpResponseresponse=exchange.getResponse();ResponseDatadata=newResponseData();data.setCode(401);data.setMessage("非法請求");byte[]datas=JsonUtils.toJson(data).getBytes(StandardCharsets.UTF_8);DataBufferbuffer=response.bufferFactory().wrap(datas);response.setStatusCode(HttpStatus.UNAUTHORIZED);response.getHeaders().add("Content-Type","application/json;charset=UTF-8");returnresponse.writeWith(Mono.just(buffer));}returnchain.filter(exchange);}//這里從請求頭中獲取用戶的實際IP,根據Nginx轉發的請求頭獲取privateStringgetIp(HttpHeadersheaders){return"127.0.0.1";}}

          過濾的使用雖然比較簡單,但作用很大,可以處理很多需求,上面講的 IP 認證攔截只是冰山一角,更多的功能需要我們自己基于過濾器去實現。

          看完上述內容,你們掌握Gateway的全局過濾器GlobalFilter是怎樣的的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注本站行業資訊頻道,感謝各位的閱讀!

          標簽:語言過濾器-

          c語言中正確的字符常量是用一對單引號將一個字符括起表示合法的字符常量。例如‘a’。數值包括整型、浮點型。整型可用十進制,八進制,十六進制。八進制前面要加0,后面...

          2022年天津專場考試原定于3月19日舉行,受疫情影響確定延期,但目前延期后的考試時間推遲。 符合報名條件的考生,須在規定時間登錄招考資訊網(www.zha...

          :喜歡聽,樂意看。指很受歡迎?!巴卣官Y料”喜聞樂見:[ xǐ wén lè jiàn ]詳細解釋1. 【解釋】:喜歡聽,樂意看。指很受歡迎。2. 【示例】:這是...

          莊家出貨的手法有哪些?1、一字出貨法這種操作手法很兇悍,在于短期快速拉高股價后,又以低于現價約3%的價格賣出,價格瞬間掉下三個點很容易吸引很多買盤,每當“賣一”快被消耗完畢,有新的賣單壓上去,一直到空頭手中無籌碼,這個過程只需要幾分鐘,在分時圖上留下一個“一”字這種出貨方法適用于熱門股。2、釣魚線出貨法這種手法,在分時圖上留下酷似釣魚的形狀,適用于熱...

          理財付融寶是什么?根據付融寶的背景來看,付融寶是比較領先的投資平臺推出的。江蘇寶貝金融信息服務有限公司成立于2009年9月,是經工商行政管理部門批準的金融信息服務企業,是“南京電子商務協會理事單位”。公司憑借多年在金融、擔保、互聯網行業的積累,完善了產品、融資、理財、風險控制、金融、客戶服務等完整的金融服務產業鏈,成長為具有卓越獨立能力的金融創新企業。理財付融寶有哪些理財產...

          房地產產業鏈也許我們的一些朋友不太了解這個術語。房地產產業鏈搞不懂看這里,其實房地產的服務鏈包含了很多服務,甚至成為了產業鏈,那么什么叫做產業鏈?房地產產業鏈包括些什么?產業鏈是產業經濟學中的一個概念,即產供銷,從原料到消費者手中的整個產業鏈條,是各個部門之間基于一定的技術經濟關聯,并依據特定的邏輯關系和時空布局關系客觀形成的鏈條式關聯關系形態。產業鏈是一個包含價值鏈、企業鏈、供需鏈和空間鏈四個維...

          TOP
          国产初高中生视频在线观看|亚洲一区中文|久久亚洲欧美国产精品|黄色网站入口免费进人
          1. <nobr id="easjo"><address id="easjo"></address></nobr>

              <track id="easjo"><source id="easjo"></source></track>
              1. 
                

              2. <bdo id="easjo"><optgroup id="easjo"></optgroup></bdo>
              3. <track id="easjo"><source id="easjo"><em id="easjo"></em></source></track><option id="easjo"><span id="easjo"><em id="easjo"></em></span></option>