上一篇,我們已經(jīng)知道了 Zuul 的配置,其中 Zuul 的路由匹配也是核心配置之一,那 Zuul 是怎么匹配我們的請求,從而讓我們的請求進(jìn)入到一系列的 ZuulFilter 呢?那就和我一起去刨一刨吧。
Zuul的路由匹配規(guī)則是什么呢?
拿出我的必殺器,DDDDebug 一下:
-
Debug 顯示匹配路由是先從 Spring 在
AbstractUrlHandlerMapping匹配HandlerExecutionChain開始Spring-Match-ZuulController 之后進(jìn)入到
ZuulFilter的 Pre 類型的FIlter當(dāng)中的PreDecorationFilter,匹配對應(yīng)的ZuulRoute-
首先把請求的路由修理一下,去掉context-path。就像例子當(dāng)中,請求 url 中
/text/test去掉了/text,再接著執(zhí)行去掉context-path -
之后進(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
我的個人水平有限,歡迎大家指正,歡迎交流~


