之前的老項目比較老每窖,里面的攔截器是通過一個servlert實現(xiàn)Filter類來實現(xiàn)的着茸,項目重構(gòu)的時候沒辦法型奥,只能改成springmvc的攔截器啦,這東西也是網(wǎng)上一搜一大把倍靡,就不在多扯了猴伶,直接進入正題。
一.先說說攔截器的作用吧
1塌西、日志記錄:記錄請求信息的日志他挎,以便進行信息監(jiān)控、信息統(tǒng)計捡需、計算PV(Page View)等雇盖。
2、權(quán)限檢查:如登錄檢測栖忠,進入處理器檢測檢測是否登錄崔挖,如果沒有直接返回到登錄頁面;
3庵寞、性能監(jiān)控:有時候系統(tǒng)在某段時間莫名其妙的慢狸相,可以通過攔截器在進入處理器之前記錄開始時間,在處理完后記錄結(jié)束時間捐川,從而得到該請求的處理時間(如果有反向代理脓鹃,如apache可以自動記錄);
4古沥、通用行為:讀取cookie得到用戶信息并將用戶對象放入請求瘸右,從而方便后續(xù)流程使用,還有如提取Locale岩齿、Theme信息等太颤,只要是多個處理器都需要的即可使用攔截器實現(xiàn)。
5盹沈、OpenSessionInView:如Hibernate龄章,在進入處理器打開Session,在完成后關(guān)閉Session。
…………本質(zhì)也是AOP(面向切面編程)做裙,也就是說符合橫切關(guān)注點的所有功能都可以放入攔截器實現(xiàn)
二岗憋、下面直接開始鋪代碼
springmvc的攔截器是實現(xiàn)HandlerInterceptor類來實現(xiàn)的,攔截器可以配置多個锚贱,實現(xiàn)該類后要實現(xiàn)父類的三個方法
如果配置了多個攔截器那么執(zhí)行循序?qū)⑹沁@樣的
三仔戈、接下來來看看springmvc的xml配置
到這里有個問題來了,如果是靜態(tài)的資源拧廊,那么如果被springmvc攔截器攔截了监徘,怎么破(反正我故意想被攔截 都沒被springmvc的攔截器攔到我的靜態(tài)資源路徑,似乎只攔截接口路徑一樣卦绣,我也不明白耐量,看了網(wǎng)上說的一堆一堆的飞蚓,都沒用滤港,暈)
如果不希望自己的靜態(tài)資源被攔截,那么可以在web.xml里面去配置趴拧,把靜態(tài)資源交給tomcat去管理
(項目中WEB-INF目錄下面的靜態(tài)資源訪問不到不是因為攔截器作用溅漾,而是為了安全性,瀏覽器一般無法直接訪問著榴,只能通過重定向后才可以訪問)
四添履,測試接口
五、測試結(jié)果
我們先輸入獲取用戶信息的接口脑又,因為此時session中還沒有值暮胧,所以表示用戶還沒登陸,會在攔截器攔截到后问麸,轉(zhuǎn)發(fā)到登陸頁面
接著我們按照正常流程來往衷,做一次登陸
主要看控制臺打印結(jié)果(好像handler執(zhí)行之前的方法忘了打印log信息了,實在抱歉)
好了严卖,差不多攔截器就到這里了席舍,做個筆記也方便自己復習,不喜勿噴哮笆,希望對你有用来颤!