解決SpringMVC攔截器path路徑的坑
SpringMVC攔截器path路徑的坑
SpringMVC提供瞭很方便的攔截器供我們開發使用。在配置文件中通過<mvc:mapping path=”” />進行配置攔截的路徑,但是這個path在配置的時候有一個小坑
我們都知道在SpringMVC攔截器中的/**是配置全部路徑.現在我有一個需求,想要攔截以/user/開頭的請求.我的path寫為/user/**,這樣就能攔截到所有的符號條件的請求.
然後我的項目需求增加瞭,我在項目中加入瞭多重權限控制並希望用攔截器去控制它.假設現在有個功能,隻開放給管理員,所以我把它的訪問路徑設為/user/manager/xxxx/xxxx.所以我又加入瞭一個攔截器,希望攔截路徑中存在/manager/的所有的請求.我把path寫為/manager/’**,結果卻不行.
user的攔截器正常,但是manager的攔截器卻不工作,我一度以為是攔截器出現瞭錯誤.然後經過一下午檢查,我發現我把路徑改成/manager/user/xxxx/xxxx就變成瞭manager攔截器工作但user攔截器不工作.我就確定是path出瞭問題.
在一次次修改嘗試後,我明白瞭,原來/user/**隻適用於以/user/開頭的請求,/user/的前面什麼都不能有,由於我所有的請求都是/user/開頭,所以user的攔截器一直都是可以正常運行的,但是manager攔截器就不同瞭,我的path寫為/manager/**,但是我所有帶有/manager/的請求都是前面有/user/的,所以這不滿足path路徑中的/manager/**.當你要在這個名稱的前面加其他的一個名稱時,你需要/*/manager/**,如果前面有多個名稱,就是/**/manager/**,當然瞭,由於/**是通配符,所以以manager開頭的url也符合這個條件.
SpringMVC攔截器設置多個path
設置多個path
同一個攔截器如果想指定多個path,直接順序添加多個<mvc:mapping path=”” />即可:
<!-- 攔截器 --> <mvc:interceptors> <!-- 多個攔截器,順序執行 --> <!-- 如果不配置或/**,將攔截所有的Controller --> <!-- 註意,匹配任意地址時註意是2個“*”號不是1個“*”號 --> <mvc:interceptor> <mvc:mapping path="/aaa/**" /> <mvc:mapping path="/bbb/**" /> <bean class="com.test.blog.interceptor.AccessInterceptor"> <property name="protectedUrls"> <list> <value>edit</value> <value>add</value> </list> </property> </bean> </mvc:interceptor> </mvc:interceptors>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 詳解SpringMVC HandlerInterceptor攔截器的使用與參數
- SpringMVC執行步驟、Model的使用詳解
- 詳解Spring MVC的攔截器與異常處理機制
- SpringMVC攔截器詳解
- SpringMVC攔截器創建配置及執行順序