spring mvc過濾器filter


SpringMVC 過濾器Filter使用解析

1.如上所示的spring-web.jar包結構所示, Spring的web包中中提供有很多過濾器,這些過濾器位於org.springframework.web.filter並且理所當然地實現了javax.servlet.Filter,

2.

不過實現的方式有以下幾類:

(1) 直接實現Filter,這一類過濾器只有CompositeFilter;

(2) 繼承抽象類GenericFilterBean,該類實現了javax.servlet.Filter,這一類的過濾器只有一個,即DelegatingFilterProxy;

(3) 繼承抽象類OncePerRequestFilter,該類為GenericFilterBean的直接子類,這一類過濾器包括CharacterEncodingFilter、HiddenHttpMethodFilter、HttpPutFormContentFilter、RequestContextFilter和ShallowEtagHeaderFilter;

(4) 繼承抽象類AbstractRequestLoggingFilter,該類為OncePerRequestFilter的直接子類,這一類過濾器包括CommonsRequestLoggingFilter、Log4jNestedDiagnosticContextFilter和ServletContextRequestLoggingFilter。

 

不過實現的方式有以下幾類:

(1) 直接實現Filter,這一類過濾器只有CompositeFilter;

(2) 繼承抽象類GenericFilterBean,該類實現了javax.servlet.Filter,這一類的過濾器只有一個,即DelegatingFilterProxy;

(3) 繼承抽象類OncePerRequestFilter,該類為GenericFilterBean的直接子類,這一類過濾器包括CharacterEncodingFilter、HiddenHttpMethodFilter、HttpPutFormContentFilter、RequestContextFilter和ShallowEtagHeaderFilter;

(4) 繼承抽象類AbstractRequestLoggingFilter,該類為OncePerRequestFilter的直接子類,這一類過濾器包括CommonsRequestLoggingFilter、Log4jNestedDiagnosticContextFilter和ServletContextRequestLoggingFilter。

 

過濾器放在容器結構的什么位置?

過濾器放在web資源之前,可以在請求抵達它所應用的web資源(可以是一個Servlet、一個Jsp頁面,甚至是一個HTML頁面)之前截獲進入的請求,並且在它返回到客戶之前截獲輸出請求。Filter:用來攔截請求,處於客戶端與被請求資源之間,目的是重用代碼。Filter鏈,在web.xml中哪個先配置,哪個就先調用。在filter中也可以配置一些初始化參數。

Java中的Filter 並不是一個標准的Servlet ,它不能處理用戶請求,也不能對客戶端生成響應。 主要用於對HttpServletRequest 進行預處理,也可以對HttpServletResponse 進行后處理,是個典型的處理鏈。

 

Filter 有如下幾個種類:

l  用戶授權的Filter: Filter 負責檢查用戶請求,根據請求過濾用戶非法請求。

l  日志Filter: 詳細記錄某些特殊的用戶請求。

l  負責解碼的Filter: 包括對非標准編碼的請求解碼。

l  能改變XML 內容的XSLTFilter 等。

Filter 有如下幾個用處 :

l  在HttpServletRequest 到達Servlet 之前,攔截客戶的HttpServletRequest 。

l  根據需要檢查HttpServletRequest ,也可以修改HttpServletRequest 頭和數據。

l  在HttpServletResponse 到達客戶端之前,攔截HttpServletResponse 。

l  根據需要檢查HttpServletResponse ,可以修改HttpServletResponse 頭和數據。

創建一個 Filter 只需兩個步驟

(1)創建Filter 處理類: 

(2)在web.xml 文件中配置Filter 。

創建Filter 必須實現javax.servlet.Filter 接口,在該接口中定義了三個方法。

• void init(FilterConfig config): 用於完成Filter 的初始化。 

• void destroy(): 用於Filter 銷毀前,完成某些資源的回收。 

• void doFilter(ServletRequest request, ServletResponse response,FilterChain chain): 實現過濾功能,該方法就是對每個請求及響應增加的額外處理。 

過濾器Filter也具有生命周期:init()->doFilter()->destroy(),由部署文件中的filter元素驅動。

參照編碼過濾器示例來查看怎么實現的

  1. 首先配置在web.xml文件里的規則如下


免責聲明!

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



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