攔截器(Interceptor)與過濾器(Filter)

目錄

用戶的普通Http請求執行順序

過濾器、攔截器添加后的執行順序

攔截器(Interceptor)的基本定義

攔截器(Interceptor)必須實現的三個方法

單個攔截器(Interceptor)的Demo實現

攔截器(Interceptor)的兩種配置方式

過濾器(Filter)的基本定義

過濾器(Filter)必須實現的三個方法

單個過濾器(Filter)的Demo實現

過濾器(Filter)的三種配置方式

通過@WebFilter注解配置

通過@Bean來配置

Spring MVC在web.xml配置

攔截器和過濾器的區別

攔截器和過濾器的作用/用途

總結

參考文獻

一、用戶的普通Http請求執行順序

二、過濾器、攔截器添加后的執行順序

三、攔截器(Interceptor)的基本定義

  攔截器是面向切面(AOP)編程中應用的一種統一處理方案,就是在你的Controller、Servie或者一個Method調用一個Method,或者在Method調用一個Method之后,統一的進行處理的方案,基于Java的反射機制。

  攔截器,在AOP(Aspect-Oriented Programming)中可以用于在某個方法或者字段被訪問之前,進行攔截,然后在之前或者之后加入某些統一的處理方法。攔截是AOP的一種具象的實現方式。

  攔截器將很多service或者Controller中共有的行為提煉出來,在某些方法執行的前后執行,提煉為通用的處理方式,讓被攔截的方法都能享受這一共有的功能,讓代碼更加簡潔,同時,當共有的功能需要發生調整、變動的時候,不必修改很多的類或者方法,只要修改這個攔截器就可以了,可復用性很強。

Spring MVC 中的Interceptor攔截請求是通過HandlerInterceptor來實現的。

四、攔截器(Interceptor)必須實現的三個方法

  1)總覽

  2)preHandle(HttpServletRequest request, HttpServletResponse response, Object handle)方法

    該方法將在請求處理之前進行調用。SpringMVC?中的Interceptor?是鏈式的調用的,在一個應用中或者說是在一個請求中可以同時存在多個Interceptor?。每個Interceptor?的調用會依據它的聲明順序依次執行,而且最先執行的都是Interceptor?中的preHandle?方法,所以可以在這個方法中進行一些前置初始化操作或者是對當前請求的一個預處理,也可以在這個方法中進行一些判斷來決定請求是否要繼續進行下去。該方法的返回值是布爾值Boolean類型的,當它返回為false?時,表示請求結束,后續的Interceptor?和Controller?都不會再執行;當返回值為true?時就會繼續調用下一個Interceptor?的preHandle?方法,如果已經是最后一個Interceptor?的時候就會是調用當前請求的Controller?方法。

3)? postHandle?(HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView) 方法【前提:在當前所屬的Interceptor?的preHandle?方法的返回值為true?時才能被調用】

    在當前請求進行處理之后,也就是Controller?方法調用之后執行,但是它會在DispatcherServlet?進行視圖返回渲染之前被調用,所以我們可以在這個方法中對Controller?處理之后的ModelAndView?對象進行操作。postHandle?方法被調用的方向跟preHandle?是相反的,也就是說先聲明的Interceptor?的postHandle?方法反而會后執行,這和Struts2?里面的Interceptor?的執行過程有點類型。Struts2?里面的Interceptor?的執行過程也是鏈式的,只是在Struts2?里面需要手動調用ActionInvocation?的invoke?方法來觸發對下一個Interceptor?或者是Action?的調用,然后每一個Interceptor?中在invoke?方法調用之前的內容都是按照聲明順序執行的,而invoke?方法之后的內容就是反向的。

4)afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex)方法【前提:在當前所屬的Interceptor?的preHandle?方法的返回值為true?時才能被調用】

    該方法將在整個請求結束之后,也就是在DispatcherServlet?渲染了對應的視圖之后執行。這個方法的主要作用是用于進行資源清理工作的。

五、單個攔截器(Interceptor)的Demo實現

  1)初始化攔截器

  2)攔截器配置類

六、攔截器(Interceptor)的兩種配置方式

  1)同上 -> Demo實現

  2)Spring MVC使用mvc:interceptors標簽??? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

七、過濾器(Filter)的基本定義

  Filter可以認為是Servlet的一種“加強版”,它主要用于對用戶請求進行預處理,也可以對HttpServletResponse進行后處理,是個典型的處理鏈。Filter也可以對用戶請求生成響應,這一點與Servlet相同,但實際上很少會使用Filter向用戶請求生成響應。使用Filter完整的流程是:Filter對用戶請求進行預處理,接著將請求交給Servlet進行處理并生成響應,最后Filter再對服務器響應進行后處理。

  在Web中稱之為Filter,通過配置多個過濾器,Web系統可以對所有的Servlet請求進行一層一層的過濾,以完成一些特殊的功能。例如常用的資源訪問權限控制、特殊字符以及敏感詞過濾、響應信息壓縮等功能。

  Servlet中的過濾器Filter是實現了javax.servlet.Filter接口的服務器端程序,主要的用途是設置字符集、控制權限、控制轉向、做一些業務邏輯判斷等。其工作原理是,只要你在web.xml文件配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時你就可以對請求或響應(Request、Response)統一設置編碼,簡化操作;同時還可進行邏輯判斷,如用戶是否已經登陸、有沒有權限訪問該頁面等等工作。它是隨你的web應用啟動而啟動的,只初始化一次,以后就可以攔截相關請求,只有當你的web應用停止或重新部署的時候才銷毀。

八、過濾器(Filter)必須實現的三個方法

  1)總覽

  2)default void init(FilterConfig filterConfig) throws ServletException {}

    用于完成Filter的初始化。

  3)void doFilter(ServletRequest var1, ServletResponse var2, FilterChain var3) throws IOException, ServletException;

    實現過濾功能,該方法就是對每個請求及響應增加的額外處理。該方法可以實現對用戶請求進行預處理(ServletRequest request),也可實現對服務器響應進行后處理(ServletResponse response)—它們的分界線為是否調用了chain.doFilter(),執行該方法之前,即對用戶請求進行預處理;執行該方法之后,即對服務器響應進行后處理。

  4)? default void destroy() {}

    用于Filter銷毀前,完成某些資源的回收。

九、單個過濾器(Filter)的Demo實現

  1)TestFilter初始化

  2)Filter配置類

十、過濾器(Filter)的三種配置方式

1)通過@WebFilter注解配置

2)通過@Bean來配置

3)Spring MVC在web.xml進行配置

    1.初始化Filter

    2.web.xml文件中配置Filter

十一、攔截器和過濾器的區別

十二、攔截器和過濾器的作用/用途

  過濾器用途:用于設置字符編碼、URL級別的權限控制,敏感詞匯的過濾

攔截器用途:攔截未登錄的用戶,攔截器和過濾器的功能相近

十三、總結

  1.過濾器:所謂過濾器顧名思義是用來過濾的,在java?web中,你傳入的request,response提前過濾掉一些信息,或者提前設置一些參數,然后再傳入servlet或者struts的action進行業務邏輯,比如過濾掉非法url(不是login.do的地址請求,如果用戶沒有登陸都過濾掉),或者在傳入servlet或者struts的action前統一設置字符集,或者去除掉一些非法字符(聊天室經常用到的,一些罵人的話)。filter 流程是線性的, url傳來之后,檢查之后,可保持原來的流程繼續向下執行,被下一個filter, servlet接收等.

  2.java的攔截器 主要是用在插件上,擴展件上比如 hibernate spring?struts2等 有點類似面向切片的技術,在用之前先要在配置文件即xml文件里聲明一段的那個東西。

十四、參考文獻

推薦:攔截器(Interceptor)與過濾器(Filter)

https://www.cnblogs.com/panxuejun/p/7715917.html《過濾器(Filter)和攔截器(Interceptor)的執行順序和區別》

https://www.cnblogs.com/junzi2099/p/8022058.html《過濾器(Filter)與攔截器(Interceptor )區別》

https://blog.csdn.net/qq_34908167/article/details/80624507《過濾器和攔截器的區別和執行順序》

https://www.cnblogs.com/feibazhf/p/11265145.html《過濾器、攔截器和監聽器區別》

    

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,030評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,310評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,951評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,796評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,566評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,055評論 1 322
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,142評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,303評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,799評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,683評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,899評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,409評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,135評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,520評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,757評論 1 282
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,528評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,844評論 2 372

推薦閱讀更多精彩內容