Zuul的路由匹配

上一篇,我們已經(jīng)知道了 Zuul 的配置,其中 Zuul 的路由匹配也是核心配置之一,那 Zuul 是怎么匹配我們的請求,從而讓我們的請求進(jìn)入到一系列的 ZuulFilter 呢?那就和我一起去刨一刨吧。

Zuul的路由匹配規(guī)則是什么呢?

拿出我的必殺器,DDDDebug 一下:

  1. Debug 顯示匹配路由是先從 Spring 在AbstractUrlHandlerMapping匹配HandlerExecutionChain開始

    Spring-Match-ZuulController
  2. 之后進(jìn)入到ZuulFilter的 Pre 類型的FIlter當(dāng)中的PreDecorationFilter ,匹配對應(yīng)的ZuulRoute

  3. 首先把請求的路由修理一下,去掉context-path。就像例子當(dāng)中,請求 url 中/text/test 去掉了 /text,再接著執(zhí)行

    去掉context-path
  4. 之后進(jìn)入到SimpleRouteLocator,判斷是否屬于 Zuul 忽略處理的請求,如果不是,再匹配對應(yīng)ZuulRoute。這里可以發(fā)現(xiàn)匹配功能都是由AntPathMatcher來負(fù)責(zé)

    SimpleRouteLocator匹配URL

那我們發(fā)現(xiàn),不管是 Spring 的匹配 Handler 還是 PreDecorationFilter 匹配 ZuulRoute,都用到的是AntPathMatcher。那我們現(xiàn)在只需要搞明白AntPathMatcher匹配規(guī)則就好了。Go on!

ANT Style Pattern

匹配規(guī)則如下:

符號 描述
? 匹配一個字符
* 匹配0個或者更多的字符
** 匹配路徑中0個或者更多目錄

舉例:

例子 解釋
com/t?st.jsp 可以匹配 com/test.jsp 或者 com/tast.jsp 或者 com/txst.jsp 等等
com/*.jsp 匹配到 com 目錄下所有 .jsp 文件
com/**/test.jsp 匹配在 com 路徑下,所有的 test.jsp 文件
org/springframework/**/*.jsp 匹配 org/springframework 路徑下所有 .jsp文件
org/**/servlet/bla.jsp 可以匹配 org 路徑下,后面多層目錄且最后一個目錄是 servlet/bla.jsp 的路徑

總結(jié)

其實(shí),刨下來 Zuul 的路由匹配還挺簡單的,主要理解并掌握 Ant 的匹配規(guī)則就完事兒了。來動手試一試吧。

Demo地址是:https://github.com/goldpumpkin/learn-demo

我的個人水平有限,歡迎大家指正,歡迎交流~

Ref.
stackoverflow-learning-ant-path-style

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容