在Spring Boot應用程序中,我設置了一個URL映射/service1/*
的篩選器。這是通過使用FilterRegistrationBean
完成的。Spring MVC路徑匹配忽略雙斜槓//
還有映射到相同的圖案的控制器:
@RestController @RequestMapping(path = "/service1")
class Service1 {
...
問題:
執行POST http://localhost:8080/service1/hello
按預期工作(即,過濾器是參與請求處理鏈,和調用服務控制器)。但是,執行http://localhost:8080//service1/hello
(注意雙斜槓)將繞過過濾器,但由於Spring MVC更寬鬆的路徑匹配算法,無論如何都要到達控制器。
我讀過控制器路徑匹配算法可以自定義(鏈接:http://docs.spring.io/spring/docs/current/spring-framework-reference/htmlsingle/#mvc-config-path-matching),但是我沒有找到一個不忽略雙斜線的選項。
同樣重要的是:這種行爲意味着任何受過濾器保護的Controller(不是Spring安全,但是任何自定義過濾器)都可以繞過,只需在URL的任何部分放置一個雙斜槓即可。我的理解是否正確? 您是否知道MVC控制器路徑匹配是否可以調整,以便在路徑匹配算法中不會忽略雙斜槓?
你嘗試過FilterRegistrationBean.setOrder(int)嗎? –
似乎問題出在您的過濾器上,您在網址上匹配的方式在此不正確。如果您使用的是spring 4,請查看http://stackoverflow.com/a/31158112/6401364。或發佈你的過濾器的配置,我們可以提供幫助 – Hani