為了賬號安全,請及時綁定郵箱和手機立即綁定

聊聊java過濾器是怎樣使用的?

2016.05.23 09:50 5403瀏覽

過濾器的工作原理及生命周期

圖片描述

圖片描述
init():這是過濾器的初始化方法,web容器創建過濾器實例后將調用這個方法。這個方法中可以讀取web.xml文件中過濾器的參數。

doFilter():這個方法完成實際的過濾操作。這個地方是過濾器的核心方法。當用戶請求訪問與過濾器關聯的URL時,Web容器將先調用過濾器的doFilter方法。FilterChain參數可以調用chain.doFilter方法,將請求傳給下一個過濾器(或目標資源),或利用轉發,重定向將請求轉發到其他資源。

destroy():web容器在銷毀過濾器實例前調用該方法,在這個方法中可以釋放過濾器占用的資源。(大多數情況用不到)
圖片描述

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>FilterTest</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>com.filter.FirstFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

過濾器鏈
過濾器1 ,過濾器2
若他們的url-pattern不一樣,則是互不干擾的兩個過濾器
若他們的url-parttern一樣,則形成了過濾器鏈

用戶請求——》過濾器1——》過濾器2——》過濾器3——》web資源
服務器會按照web.xml中過濾器定義的先后順序組裝成一條鏈

過濾器鏈執行過程
圖片描述
eg:
start----doFilter--FirstFilter
start---doFilter--SecondFilter
index.jsp
end---doFilter--SecondFilter
end------doFilter—FirstFilter

過濾器的分類
Servlet2.5

  1. Request:用戶直接訪問頁面時,web容器將會調用過濾器
  2. Forward:目標資源是通過RequestDispatcher的forward訪問時,該過濾器將被調用
  3. Include:目標資源是通過RequestDispatcher的include訪問時,該過濾器將被調用
  4. Error:目標資源時通過聲明式異常處理機制調用時,過濾器將被調用
    Servlet3.0
    ASYNC:支持異步處理

@WebFilter
@WebFilter用于將一個類聲明為過濾器,該注解會在部署時被容器處理,容器將根據具體的屬性配置將相應的類部署為過濾器。
圖片描述

圖片描述

過濾器在實際項目中的應用場景

  1. 對用戶請求進行統一認證
  2. 編碼轉換
  3. 對用戶發送的數據進行過濾替換
  4. 轉換圖像格式
  5. 對響應的內容進行壓縮
點擊查看更多內容
12人點贊

若覺得本文不錯,就分享一下吧!

評論

相關文章推薦

正在加載中
意見反饋 幫助中心 APP下載
官方微信

舉報

0/150
提交
取消
lpl竞猜