天天看點

Filter 的應用場景、Filter 的目标資源、小結| 學習筆記

開發者學堂課程【Filte(過濾器)、Listener(監聽器):Filter 的應用場景、Filter 的目标資源、小結】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/38/detail/878

Filter 的應用場景、Filter 的目标資源、小結

内容介紹

一、過濾器的應用場景。

二、案例分類。

三、設定目标資源。

四、Filter mapping 的子元素。

五、Filter小結。

1、執行目标資源之前做預處理工作,例如設定編碼,這種試通常都會放行 ,隻是在目标資源執行之前做一些準備工作。

(批注:幾乎所有的 Servlet 中都需要寫request.setCharacterEndoing()可以把它寫到一個Filter中。)

(過濾器不會做攔截操作,隻是設定編碼。)

2、通過條件判斷是否放行,例如校驗目前使用者是否已經登入,或者使用者IP是否已經被禁用。(有攔截操作,判斷Id是否在禁用區域。)

 3、在目标資源執行後,做一些後續的特殊處理工作,例如把目标資源輸出的資料進行處理。(批注:回程攔截!)

1、分IP統計通路次數:第一種預處理。

2、粗粒度權限控制:資源分為三個等級。如在淘寶中,為遊客、會員、管理者,可以通路商品不可查詢訂單為遊客等級,既可以通路商品又可查詢訂單的為會員等級,可以調價格的為管理者等級。

這屬于第二種通過條件判斷。

3、解決全站字元亂碼:第一種預處理 。

4、頁面靜态化:第三種回程攔截,做後續處理。

在web.xml檔案中部署Fiter時, 可以通過“*”來執行目标資源:

這一特性與Servlet完全相同!通過這一特性,我們可以在使用者通路敏感資源時,執行過濾器,例如:admin/*可以把所有管理者才能通路的資源放到/admin路徑下,這時可以通過過濾器來校驗使用者身份。

還可以為filter-mapping〉指定目标資源為某個Servlet,例如:

< filter-mapping>

myfilter

/*

批注:/*表示過濾所有資源

< servlet>

< servlet-name>

myservlet

< servlet-class

> cn.itcast.servlet.MyServlet

< servlet-name>

myservlet

< servlet-

name

>

/abc

>

<

 s

evlet-mapping

>

> myfilter< /filter-name>

< filter-class

>

cn.itcaat.

 filter.

MyFilterilter

-class>

< filter-mapping>

myfilter

'

<

servlet-name >

m

yservlet

 servlet-name)

mapping>

批注:

 <

servlet-name >

m

yservlet

 servlet-name)

這裡沒有指定< url-patter>,而是指定< server-name>!注意,它與某個 servlet 的配置名稱相同!

當使用者通路http: localhost:8080/filtertest/abc時,會執行名字為 myservlet 的servlet ,這時會執行過濾器。

注:serlet-name 指定方式可以有多個。

四、Filter-mapping 的子元素。

五、Filter 小結。

1、filter 的三個方法。

①void init (filterConfig):在 Tomcat 啟動時被調用;

②void destroy(): 在 Tomcat 關閉時被調用;

③void doFitertServletRequest,ServletResponse,FterChain):每次有請求時都調用該方法。

2、FilterConfig類: 與 ServletConfig 相似,用來擷取 Fiter 的初始化參數。

①ServletContext getServletContext(): 擷取 ServletContext 的方法;

②String getFiterName):擷取 Fiter 的配置名稱;

③string getnitParametert(string name):擷取Fiter的初始化配置,與〈init-param〉元素對應;

④Enumeration getinitParameterNames(): 擷取所有初始化參數的名稱。

3、FRerChain 類

void doFiter(ServletRequest,ServletResponse):放行!表示執行下一個過濾器,或者執行目标資源,可以在調用 FiltetChain 的 doFiter()方法的前後添加語句,在FilterChain的dofiter()方法之後的語句會在目标資源執行之後執行。

4、四種攔截方式 :REQUEST,FORWARD,INCLUDE,ERROR,預設是 REQUEST 方式。

①REQUEST:攔截直接請求方式;

②FORWARD:攔截請求轉發方式 ;

③INCLUDE:攔截請求包含方式;

④ERROR:攔截錯誤轉發方式。

繼續閱讀