尾部加”/”匹配useTrailingSlashMatch
引數初始化
引數初始化取決于requestMapping這個bean,這個bean在spring的IOC容器中初始化
我們多載一下requestMapping這個類即可


而在springboot中的初始化的bean名稱默認是requestMappingHandlerMapping
而使得這個bean注入的類是WebMvcAutoConfiguration
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.EnableWebMvcConfiguration#requestMappingHandlerMapping

也是WebMvcConfigurationSupport 這個類,也就是說在初始化這個類的時候會注入mapping的物件
通過觀察原始碼,EnableWebMvcConfiguration初始化最侄訓是在WebMvcConfigurationSupport中進行初始化mapping物件

通過繼承我們發現support才是真正的注入方法類
這個創建bean的方法中有這樣一段代碼

打開進去看看

到這里我們發現這個物件的初始化是new出來,也就是說無法配置,都是默認設定的值,但是同時我們注意到下面有個config方法,我們進去看看
看一下是哪里呼叫了configurePathMatch方法

我們發現是這個類呼叫了,然后回圈處理配置,我們看一下這個代理的配置從哪來的

繼續探討


最終我們觀察到注入進來的類是
org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration.WebMvcAutoConfigurationAdapter,繼續追蹤

這個地方就是這種path匹配規則的地方,但是在這個類中,沒有設定我們想要修改的值
Mvc默認在yml檔案中的配置也不支持

那么就只能自己多載一下

直接多載這里會有個問題,因為ResourceHandlerRegistrationCustomizer不是spring對外公開的類,那么這里直接使用就會報錯

我們需要實作這類

至此大工告成,運行起來看看

下面是false的原因是我修改yml檔案配置

匹配規則
- Controller中的匹配規則不是/結尾的
- 請求的路徑是Controller中路徑+/的組合

如果匹配成功,回傳匹配成功的結果
驗證結果

修改配置

路徑匹配失敗

總結
研究這個問題的主要原因是,springmvc會默認吧這個斜杠匹配到不帶斜杠的路徑上,這樣就可能對我們的路徑匹配有困擾
如果我們是用springmvc的pattern進行匹配鑒權的url,那么就可以通過構建一個斜杠的url去繞過校驗,這個時候我們吧這個配置關掉就可以避免這種情況
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/458507.html
標籤:其他
上一篇:springboot~將一個Integer型別序列為k/v物件
下一篇:使用RocketMQ消費訊息
