Filter過濾器的使用

空想家005發表於2021-09-22

------------恢復內容開始------------

Filter 過濾器的使用

1、過濾器需要實現 implements Filter

2、屬於Servlet規範,實現Filter介面,需要實現Filter介面,需要實現其中的三個方法

  • init( )   初始化方法
  • doFilter( )  放行,
  • destroy()  銷燬,結束

3、過濾器的配置和Servlet的配置類似,在web.xml只需要將Servlet修改filter

 

 <filter>
        <filter-name>HelloFilter</filter-name>
        <filter-class>com.kong.filter.HelloFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>HelloFilter</filter-name>
        <url-pattern>/*【過濾範圍】</url-pattern>
    </filter-mapping>
    <filter>

 4、當設定成攔截/*,就是攔截所有的請求,因此會被Filter攔截,並執行其中的方法,其中必須在doFilter中實現放行操作:chain.doFilter(request,response),否則過濾器不會放行,S0ervlet中收不到任何請求。

所有

chain.doFilter(request,response)成為了一條分界線,分界線前一部分的請求是攔截Filter執行,分界線後面的程式碼即將響應給客戶端執行

5、順序問題:如果設定了web.xml配置檔案,就按照配置的maping順序執行,如果是註解方式配置,就按照全類名【包名+類名】排序的順序。

6、 過濾器的生命週期和Servlet的生命週期類似:

 - 例項化         一次
 - 初始化 : init()         一次
 - 服務 : doFilter()     多次
 - 銷燬 : destroy()     一次

7、過濾器的匹配規則

  •  精確匹配:   /hello.do :攔截/hello.do的請求  攔截/xxx的 請求
  • 模糊匹配:   *.xx   : 攔截以*.xx結尾的請求    /* :攔截所有的請求

 8、給過濾器配置初始化引數

  • xml方式
  • 在filter註解後面,在註解<filter-mapping></filter-mapping>後面新增:
    <filter>
             <init-param>
                 <param-name>parameter</param-name>
                 <param-value>value</param-value>
             </init-param>
    </filter>

     

  • 註解方式
  • Filter過濾器的使用
    1 在Filter類的頭頂設定註解,並配置初始化引數,設定註解就不需要設定xml,二者不能衝突,重新重載入 。
    2 @WebFilter(urlPatterns
    3  ={"/*"}, initParams = {@WebInitParam(name="encoding",
    4 value = "GBK")} )
    註解方式
    1 在Filter類頭上設定註釋,並初始化引數 ,不能和xml同時設定,會導致重載入。
    2 例項程式碼:
    3 @WebFilter(urlPatterns 
    4 = {"/*"},initParams = {@WebInitParam(name="parameter",
    5 value = "value")})

     個人理解【新手】 :攔截器就是為了匹配自己是否能訪問該頁面,條件去判斷,當不滿足條件是無法調轉該頁面,條件達成時可以通過攔截器到達該頁面。例如在網頁登入成功後可以訪問更多介面,路人未登入時無法進入一些介面,例如:支付介面,付費頁面等

 

 

 


------------恢復內容結束------------

相關文章