3 4 路徑模式與字尾匹配

2021-09-18 04:06:38 字數 1684 閱讀 6281

1)路徑模式

2)路徑模式比較

當乙個 url 匹配多個模式時,會進行一次分類來尋找最佳匹配。

擁有數量最少的 uri 變數和萬用字元的匹配的路徑模式被認為是最佳匹配。比如「/hotels//*」有乙個 uri 變數和乙個萬用字元,而「/hotels//**」有乙個uri變數和量個萬用字元,所以前者被認為是最佳匹配。

如果兩個模式有相同數量的萬用字元或uri變數,那麼最長的那個被認為是最佳匹配。比如「/foo/bar*」比「/foo/*」長,所以前者是最佳匹配。

如果兩個模式有相同數量的萬用字元或uri變數,且長度相同,那麼萬用字元最少的那個被認為是最佳匹配。比如「/hotels/」相對於「/hotels/*」是最佳匹配。

還有一些額外的特殊規則:

預設的對映模式「/**」比任何其他匹配模式的優先順序都低。比如:「/api///」的優先順序高於「/**

字首模式比如「/public/**」的優先順序低於任何其他的不包含雙萬用字元的模式。比如「/public/path3///」的優先順序更高。

全部的詳細資訊參見antpathmatcher中的antpatterncomparator。注意,pathmatcher可以自定義(見「路徑匹配」)。

3)帶有佔位符的路徑模式

4)字尾模式匹配

spring mvc 預設執行「.*」字尾匹配,所以乙個對映到「/person」的控制器隱式地對映到「/person.*」。這讓請求通過url路徑(比如/person.pdf/person.xml)來獲取資源很簡單。

字尾模式匹配可以被關閉,或者把它限制到一組顯式註冊為協商好內容的路徑擴充套件。這通常建議用於在普通請求對映中減少歧義,比如「/person/」中的乙個點可能不代表副檔名,如「/person/[email protected]」和「/person/[email protected]」。而且,就像下面解釋的那樣,字尾模式匹配和內容協商可能被用在一些情形中來企圖進行惡意攻擊,所以有很好的理由來限制它們。

字尾匹配配置參見「路徑匹配」 ,內容協商配置參見「內容協商」。

5)字尾模式匹配和 rfd

在 spring mv c中 @responsebody 和 responseentity 的方法面臨危險,因為它們可以渲染客戶端能夠通過 url 路徑擴充套件請求的不同型別的內容。注意到即不禁止字尾模式匹配也不單純為內容協商目的禁止使用檔案拓展名將有效防止 rfd 攻擊。

很多常用的路徑副檔名預設在白名單中。此外,rest api 呼叫通常不是直接在瀏覽器中用作 url 。使用自定義 httpmessageconverter 實現的應用可以為內容協商顯式註冊副檔名,響應頭 content-disposition 不會被新增到這樣的副檔名中。參見「內容協商」。

這最初在cve-2015-5211工作報告中引進。下面是這份報告的補充建議:

LeetCode 34 路徑總和 II

碼上生花,echarts 作品展示賽正式啟動!給定乙個二叉樹和乙個目標和,找到所有從根節點到葉子節點路徑總和等於給定目標和的路徑。說明 葉子節點是指沒有子節點的節點。示例 給定如下二叉樹,以及目標和 sum 22,5 4 8 11 13 4 7 2 5 1 返回 5,4,11,2 5,8,4,5 本...

ngnix 系列二 路徑匹配

首先看有沒有精準匹配,如果有,則停止匹配過程.location patt location image 如果我們訪問 此時,與 image logo.png 匹配 同時,image 正則 與 image logo.png 也能匹配,誰發揮作用?正規表示式的成果將會使用.真正會訪問 var www i...

AS2 路徑,包與 include小結

路徑,包與 include小結 最近做了乙個比較大的東東,積累了些比較有用的as2技巧,拿出點有用的和大家分享先 有些與腳下本字典有重複了 這裡只介紹一些在用的時候需要注意的地方,不涉及oop程式設計方面的內容。1 include 1.1 inlcude 是用來匯入外部指令碼的語句,這樣的話,你就可...