Spring中Filter和Interceptor有那些區(qū)別?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
Interceptor
主要作用:攔截用戶請(qǐng)求,進(jìn)行處理,比如判斷用戶登錄情況、權(quán)限驗(yàn)證,只要針對(duì)Controller請(qǐng)求進(jìn)行處理,是通過HandlerInterceptor。
Interceptor分兩種情況,一種是對(duì)會(huì)話的攔截,實(shí)現(xiàn)spring的HandlerInterceptor接口并注冊(cè)到mvc的攔截隊(duì)列中,其中preHandle()方法在調(diào)用Handler之前進(jìn)行攔截(上圖步驟3),postHandle()方法在視圖渲染之前調(diào)用(上圖步驟5),afterCompletion()方法在返回相應(yīng)之前執(zhí)行;另一種是對(duì)方法的攔截,需要使用@Aspect注解,在每次調(diào)用指定方法的前、后進(jìn)行攔截。
Filter
主要作用:過濾字符編碼、做一些業(yè)務(wù)邏輯判斷,主要用于對(duì)用戶請(qǐng)求進(jìn)行預(yù)處理,同時(shí)也可進(jìn)行邏輯判斷。
Filter在請(qǐng)求進(jìn)入servlet容器執(zhí)行service()方法之前就會(huì)經(jīng)過filter過濾(上圖步驟1),不像Intreceptor一樣依賴于springmvc框架,只需要依賴于servlet。Filter啟動(dòng)是隨WEB應(yīng)用的啟動(dòng)而啟動(dòng),只需要初始化一次,以后都可以進(jìn)行攔截。
Filter有如下幾個(gè)種類:
用戶授權(quán)Filter:檢查用戶請(qǐng)求,根據(jù)請(qǐng)求過濾用戶非法請(qǐng)求;
日志Filter:記錄某些特殊的用戶請(qǐng)求;
解碼Filter:對(duì)非標(biāo)準(zhǔn)編碼的請(qǐng)求解碼。
Filter和Interceptor的區(qū)別
1、Filter是基于函數(shù)回調(diào)(doFilter()方法)的,而Interceptor則是基于Java反射的(AOP思想)。
2、Filter依賴于Servlet容器,而Interceptor不依賴于Servlet容器。
3、Filter對(duì)幾乎所有的請(qǐng)求起作用,而Interceptor只能對(duì)action請(qǐng)求起作用。
4、Interceptor可以訪問Action的上下文,值棧里的對(duì)象,而Filter不能。
5、在action的生命周期里,Interceptor可以被多次調(diào)用,而Filter只能在容器初始化時(shí)調(diào)用一次。
6、Filter在過濾是只能對(duì)request和response進(jìn)行操作,而interceptor可以對(duì)request、response、handler、modelAndView、exception進(jìn)行操作。
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)Spring中Filter和Interceptor有那些區(qū)別大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。