日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Cloud(五) Zuul Filter

發(fā)布時間:2025/3/20 javascript 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Cloud(五) Zuul Filter 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前文回顧:

Spring Cloud(一)Eureka Server-單體及集群搭建

Spring Cloud(二) 配置Eureka Client

Spring Cloud(三) 熔斷器Hystrix

Spring Cloud(四) API網(wǎng)關(guān)Zuul

一.執(zhí)行流程

Filter是Zuul的核心,用來實現(xiàn)對外服務(wù)的控制。Filter的生命周期有4個,分別是“PRE”、“ROUTING”、“POST”、“ERROR”,整個生命周期可以用下圖來表示。

Zuul大部分功能都是通過過濾器來實現(xiàn)的。Zuul中定義了四種標準過濾器類型,這些過濾器類型對應(yīng)于請求的典型生命周期。

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

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

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

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

二.自定義Filter

我們假設(shè)有這樣一個場景,因為服務(wù)網(wǎng)關(guān)應(yīng)對的是外部的所有請求,為了避免產(chǎn)生安全隱患,我們需要對請求做一定的限制,比如請求中含有Token便讓請求繼續(xù)往下走,如果請求不帶Token就直接返回并給出提示。

在上一篇博客的Zuul項目中添加如下內(nèi)容:

1.自定義TokenFilter

public class TokenFilter extends ZuulFilter { ?private final Logger logger = LoggerFactory.getLogger(TokenFilter.class); ?@Overridepublic String filterType() {// 可以在請求路由之前被調(diào)用return "pre";} ?@Overridepublic int filterOrder() {// filter執(zhí)行順序,通過數(shù)字指定 ,優(yōu)先級為0,數(shù)字越大,優(yōu)先級越低return 0;} ?@Overridepublic boolean shouldFilter() {// 是否執(zhí)行該過濾器,此處為true,說明需要過濾return true;} ?@Overridepublic Object run() {RequestContext ctx = RequestContext.getCurrentContext();HttpServletRequest request = ctx.getRequest(); ?logger.info("--->>> TokenFilter {},{}", request.getMethod(), request.getRequestURL().toString()); ?// 獲取請求的參數(shù)String token = request.getParameter("token"); ?if (StringUtils.isNotBlank(token)) {// 對請求進行路由ctx.setSendZuulResponse(true);ctx.setResponseStatusCode(200);ctx.set("isSuccess", true);return null;} else {// 不對其進行路由ctx.setSendZuulResponse(false);ctx.setResponseStatusCode(400);ctx.setResponseBody("token is empty");ctx.set("isSuccess", false);return null;}} }

2.在啟動類中添加Bean

@Bean public TokenFilter tokenFilter() {return new TokenFilter(); }

3.測試

依次啟動 spring-cloud-eureka、 spring-cloud-producer、gateway-service-zuul-eureka

訪問:http://localhost:8888/producer/hello?name=yfy

返回:token is empty

添加token參數(shù),再次訪問:http://localhost:8888/producer/hello?name=yfy&token=test

返回:hello yfy,welcome to Spring Cloud

總結(jié)

以上是生活随笔為你收集整理的Spring Cloud(五) Zuul Filter的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。