java過濾器中Filter的ChainFilter過濾鏈
1、什么是過濾器?
在客戶端到服務(wù)器的過程中,當發(fā)送請求時,如果有不符合的信息將會被filter進行攔截,如果符合則會進行放行,在服務(wù)器給客戶端響應(yīng)時也會進行判斷 如果有不符合的信息將會被filter進行攔截,如果符合則會進行放行。
OOP:Java面向?qū)ο缶幊?,抽象、封裝、繼承、多態(tài)。
AOP:面向切面編程,過濾器就是一個面向切面的編程思想。
AOP是sun公司srvlet2.3版本之后推出的新功能,在2.3之前的版本沒有該功能,定義一個過濾器需要實現(xiàn)(implement)Filter接口,這里實現(xiàn)的是javax.servlet.Filter。
過濾器是一個程序,它先于與之相關(guān)的servlet或JSP頁面運行在服務(wù)器上。過濾器可附加到一個或多個servlet或JSP頁面上,并且可以檢查進入這些資源的請求信息。在這之后,過濾器可以作如下的選擇:
①以常規(guī)的方式調(diào)用資源(即,調(diào)用servlet或JSP頁面)。
②利用修改過的請求信息調(diào)用資源。
③調(diào)用資源,但在發(fā)送響應(yīng)到客戶機前對其進行修改。
④阻止該資源調(diào)用,代之以轉(zhuǎn)到其他的資源,返回一個特定的狀態(tài)代碼或生成替換輸出。
2、過濾器的生命周期:
在項目開始啟動的時候,過濾器開始初始化,當有請求來的時候開始自動去執(zhí)行doFilter方法,隨著項目的關(guān)閉過濾器開始停止。
3、過濾器有什么用?
過濾器主要的作用是過濾請求,可以通過Filter技術(shù),web服務(wù)器管理的所有web資源:例如:JSP、Servlet、靜態(tài)圖片文件、或靜態(tài)HTML文件進行攔截,從而實現(xiàn)一些特殊功能,例如:實現(xiàn)URL級別的權(quán)限控制、過慮敏感詞匯、壓縮響應(yīng)信息等一些高級功能。
4、該怎么用?
可以寫多個,從用戶訪問——》第一個過濾器——》第二個過濾器——》Servlet
過濾器的生命周期:隨著項目的啟動而創(chuàng)建,當訪問了地址后而調(diào)用doFilter方法,這個會多次執(zhí)行,隨著項目的關(guān)閉而銷毀。
調(diào)用doFilter方法時有三個參數(shù):
reqest(ServletRequest)——》HttpServletRequest(注意強轉(zhuǎn):在使用HttpServletRequest這個獨有的方法時要強轉(zhuǎn))
response(ServletResponse)——》HttpServletResponse(注意強轉(zhuǎn):在使用HttpServletResponse這個獨有的方法時要強轉(zhuǎn))
filterchain 鏈 可以指向下一個地址(如果有過濾器則指向下一個過濾器,沒有指向資源Servlet) 過濾、攔截、放行
chain.doFilter(req,resp);//放行
ChainFilter鏈:
它可以指向下一個資源,如果還有過濾器,則繼續(xù)進行下一次的過濾,如果沒有過濾器,則會指向資源(servlet)。

filter應(yīng)用場景:
(1).為所有的Servlet設(shè)置編碼
(2).設(shè)置跨域問題
(3).解決所有的防盜鏈問題
使用過濾器的時候需要配置的文件:
(1)、固定地址
(2)、通配符
(3)、指定目錄
過濾器代碼奉上:
package servlet;
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;/**
* urlPattern={"/*"}獲取所有的Servlet的映射路徑,實現(xiàn)不同Servlet之間的交互
*/
@WebServlet(name = "DemoFilter",urlPatterns = {"/*"})
public class DemoFilter implements Filter{
/**
* 過濾器的初始化方法
* @param filterConfig 可以獲取部署描述符文件(web.xml)中分配的過濾器初始化參數(shù)。
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("過濾器被創(chuàng)建了");
}/**
*
* @param servletRequest 請求
* @param servletResponse 響應(yīng)
* @param filterChain 鏈條,對過濾器進行阻止和放行
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("過濾器被執(zhí)行了");
servletResponse.setContentType("text/html,charset=utf-8");
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
response.addHeader("Access-Control-Allow-Origin","*");
String referer = request.getHeader("referer");
System.out.println(referer);
filterChain.doFilter(servletRequest,servletResponse);//放行
}@Override
public void destroy() {
System.out.println("過濾器被銷毀了");
}
}
到此這篇關(guān)于java過濾器中Filter的ChainFilter過濾鏈的文章就介紹到這了,更多相關(guān)java過濾器Filter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot使用alibaba的druid數(shù)據(jù)庫連接池錯誤的問題及解決
這篇文章主要介紹了springboot使用alibaba的druid數(shù)據(jù)庫連接池錯誤的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-02-02
淺談SpringSecurity注解與AOP切面執(zhí)行順序
這篇文章主要介紹了淺談SpringSecurity注解與AOP切面執(zhí)行順序,引入Spring Security后,在Controller的方法中會出現(xiàn)Spring Security的方法注解與AOP同時存在的問題,這是就會設(shè)計順序問題,需要的朋友可以參考下2023-10-10
Spring配置shiro時自定義Realm中屬性無法使用注解注入的解決辦法
今天小編就為大家分享一篇關(guān)于Spring配置shiro時自定義Realm中屬性無法使用注解注入的解決辦法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
全面解析Spring Security 過濾器鏈的機制和特性
這篇文章主要介紹了Spring Security 過濾器鏈的機制和特性,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-07-07

