更新時(shí)間:2023-01-09 來源:黑馬程序員 瀏覽量:
在一個(gè)Web應(yīng)用程序中可以注冊多個(gè)Filter程序,每個(gè)Filter程序都可以針對(duì)某一個(gè)URL進(jìn)行攔截。如果多個(gè)Filter程序都對(duì)同一個(gè)URL進(jìn)行攔截,那么這些Filter就會(huì)組成一個(gè)Filter鏈(也稱過濾器鏈)。Filter鏈用FilterChain對(duì)象中有一個(gè)doFilter()方法,該方法的作用是讓Filter鏈上的當(dāng)前過濾器放行,使請(qǐng)求進(jìn)入下一個(gè)Filter。
Filter鏈的攔截過程如圖14-6所示。
圖14-6 Filter鏈
在圖14-6中,當(dāng)瀏覽器訪問Web服務(wù)器中的資源時(shí),需要經(jīng)過兩個(gè)過濾器Filter1和Filter2。首先Filter1會(huì)對(duì)這個(gè)請(qǐng)求進(jìn)行攔截,在Filter1中處理完請(qǐng)求后,通過調(diào)用Filter1的doFilter()方法將請(qǐng)求傳遞給Filter2,F(xiàn)ilter2處理用戶請(qǐng)求后同樣調(diào)用doFilter()方法,最終將請(qǐng)求發(fā)送給目標(biāo)資源。當(dāng)Web服務(wù)器對(duì)這個(gè)請(qǐng)求做出響應(yīng)時(shí),也會(huì)被過濾器攔截,但這個(gè)攔截順序與之前相反,最終將響應(yīng)結(jié)果發(fā)送給客戶端瀏覽器。