首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Web Filter 過濾器完整教程:原理、生命週期、鏈機制與配置詳解

     編輯:Java 相關知識

Filter 核心價值

攔截所有 Web 資源(JSP、Servlet、靜態文件),實現:權限控制、敏感詞過濾、編碼統一、壓縮響應、日誌記錄、XSS 防護等橫切關注點。

工作原理

容器啟動實例化 Filter → init() → 每次請求調用 doFilter(req, resp, chain) → 開發者決定是否 chain.doFilter() 放行 → destroy() 銷毀。

入門範例:統一編碼過濾器

@WebFilter("/*")
public class EncodingFilter implements Filter {
    private String encoding = "UTF-8";
    @Override public void init(FilterConfig cfg) { encoding = cfg.getInitParameter("encoding"); }
    @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        req.setCharacterEncoding(encoding);
        resp.setContentType("text/html;charset=" + encoding);
        chain.doFilter(req, resp); // 放行
    }
    @Override public void destroy() {}
}

Filter 鏈執行順序

按 web.xml 或 @WebFilter 聲明順序:Filter1→Filter2→...→Target Resource。任一 Filter 不調用 chain.doFilter() 即阻斷鏈。

生命週期

  • 創建:應用啟動時單例創建,init() 僅執行一次
  • 服務:每請求調用 doFilter()
  • 銷毀:應用停止/重新部署時調用 destroy() 釋放資源

FilterConfig 獲取初始化參數

<filter>
  <filter-name>AuthFilter</filter-name>
  <filter-class>com.demo.AuthFilter</filter-class>
  <init-param><param-name>excludedPaths</param-name><param-value>/login,/register</param-value></init-param>
</filter>
<filter-mapping><filter-name>AuthFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
public void init(FilterConfig cfg) {
    String paths = cfg.getInitParameter("excludedPaths");
    // 解析為 Set 供 doFilter 判斷放行
}

映射匹配規則

元素說明
<url-pattern>路徑匹配:/api/*、/*.jsp、/exact/path
<servlet-name>按 Servlet 名稱攔截
<dispatcher>REQUEST(默認)、FORWARD、INCLUDE、ERROR、ASYNC

多 <dispatcher> 可組合,如同時攔截直接訪問與轉發:

<filter-mapping>
  <filter-name>LogFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
</filter-mapping>
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved