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

Java Web 過濾器詳解:配置、鏈路與實戰應用

     編輯:Java 綜合教學

什麼是過濾器

過濾器在請求到達 Servlet 前、響應返回客戶端前攔截處理。多個過濾器組成過濾鏈,按配置順序執行。

攔截路徑配置

模式說明範例
/*所有資源/index.jsp, /api/user
*.html特定副檔名/page.html
/folder/*目錄下所有/admin/dashboard
/servletName指定 Servlet/loginServlet
/dir/file.jsp單一檔案/WEB-INF/view/login.jsp

注意:路徑必須以 / 開頭。

調度類型

  • REQUEST — 瀏覽器直接請求、sendRedirect、<a href>、JS 跳轉。
  • FORWARD — <jsp:forward>、RequestDispatcher.forward()。
  • INCLUDE — <jsp:include>、<%@ include %>。
  • ERROR — 錯誤頁面跳轉。
  • ASYNC — 非同步請求(Servlet 3.0+)。

核心應用場景

  1. 字符編碼統一 — 設定 request/response.setCharacterEncoding("UTF-8")。
  2. 登入權限控制 — 檢查 Session,未登入導向登入頁。
  3. 請求日誌記錄 — 記錄 IP、URL、耗時、參數。
  4. 敏感詞過濾 — 替換請求參數中的非法詞彙。
  5. 壓縮響應 — GZIP 壓縮 HTML/JSON。

實作範例:編碼過濾器

@WebFilter(urlPatterns = "/*", dispatcherTypes = {DispatcherType.REQUEST})
public class EncodingFilter implements Filter {
    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        chain.doFilter(req, resp);
    }
}

最佳實踐

  • 過濾器盡量輕量,避免複雜業務邏輯。
  • 使用 @WebFilter 註解替代 web.xml(Servlet 3.0+)。
  • 順序敏感時,在 web.xml 中明確排序或用 @Order(Spring Boot)。
  • 異常處理:chain.doFilter 用 try-finally 確保資源釋放。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved