SpringMVC的攔截器(Interceptor)和過濾器(Filter)的區別與聯系


1.過濾器:

  依賴於servlet容器。在實現上基於函數回調,可以對幾乎所有請求進行過濾,但是缺點是一個過濾器實例只能在容器初始化時調用一次。使用過濾器的目的是用來做一些過濾操作,獲取我們想要獲取的數據.

  比如:在過濾器中修改字符編碼;在過濾器中修改         HttpServletRequest的一些參數,包括:過濾低俗文字、危險字符等

  關於過濾器的一些用法可以參考我寫過的這些文章:

    繼承HttpServletRequestWrapper以實現在Filter中修改HttpServletRequest的參數:https://www.zifangsky.cn/677.html

    在SpringMVC中使用過濾器(Filter)過濾容易引發XSS的危險字符:https://www.zifangsky.cn/683.html

2.攔截器:

  依賴於web框架,在SpringMVC中就是依賴於SpringMVC框架。在實現上基於Java的反射機制,屬於面向切面編程(AOP)的一種運用。由於攔截器是基於web框架的調用.

  因此可以使用spring的依賴注入(DI)進行一些業務操作,同時一個攔截器實例在一個controller生命周期之內可以多次調用。但是缺點是只能對controller請求進行攔截,對其他的一些比如直接訪問靜態資源的請求則沒辦法進行攔截處理。

  關於攔截器的一些用法可以參考我寫過的這些文章:

    SpringMVC中使用攔截器(interceptor)攔截CSRF攻擊(修):https://www.zifangsky.cn/671.html

    SpringMVC中使用Interceptor+cookie實現在一定天數之內自動登錄:https://www.zifangsky.cn/700.html

3.執行順序

  過濾器的運行是依賴於servlet容器的,跟springmvc等框架並沒有關系。並且多個過濾器的執行順序跟web.xml文件中定義的先后關系有關。

  攔截器的執行順序跟在SpringMVC的配置文件中定義的先后順序有關。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM