spring security filter獲取請求的urlpattern

本文主要講一下如何在spring security filter裏頭獲取請求的HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTEgit

BEST_MATCHING_PATTERN_ATTRIBUTE

spring mvc支持在url配置變量,這個比較容易知足rest風格的api設計,可是也給鑑權、監控統計等帶來一些麻煩,那就是原來光靠uri來進行判斷已經不行了,必須改造使用url pattern來判斷。github

BEST_MATCHING_PATTERN_ATTRIBUTE的設置是在spring mvc的dispatch servlet裏頭,可是spring security的filter執行順序在mvc以前,於是在spring security裏頭的filter沒法獲取BEST_MATCHING_PATTERN_ATTRIBUTEspring

那麼在這種狀況下,如何本身獲取呢api

RequestMappingHandlerMapping#getHandler

答案就是從RequestMappingHandlerMapping入手,獲取handler,即調用這個方法handlerMapping.getHandler((HttpServletRequest) servletRequest);
它就提早觸發計算BEST_MATCHING_PATTERN_ATTRIBUTE,以後就能夠正常從attrivute中取了。mvc

實現實例

HandlerExecutionChain chain = handlerMapping.getHandler((HttpServletRequest) servletRequest);
String urlPattern = servletRequest.getAttribute(HandlerMapping.BEST_MATCHING_PATTERN_ATTRIBUTE);

計算BEST_MATCHING_PATTERN_ATTRIBUTE的核心邏輯在handlerMapping.getHandler(HttpServletRequest)這個方法裏頭,至於源碼是如何,後續專門寫一篇來說。app

這樣就大功告成了。spring-boot

doc

相關文章
相關標籤/搜索