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

Struts 過濾器實戰:兩步驟實現字元編碼與 IP 存取控制

     編輯:Java 程式設計入門

情境:Struts 專案需要統一處理請求前置邏輯

常見需求:統一設定請求編碼、依 IP 限制存取。利用 Servlet Filter 與 Struts RequestProcessor 擴充點,兩步驟完成。

步驟一:web.xml 註冊編碼過濾器

<filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>com.yirong.framework.filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>GBK</param-value>
    </init-param>
    <init-param>
        <param-name>ignore</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

步驟二:自訂 RequestProcessor 實作 IP 過濾

放置於專案原始碼目錄 (如 /myweb/src/Beans/MyRequestProcessor.java):

package Beans;

import org.apache.struts.action.RequestProcessor;
import javax.servlet.*;
import javax.servlet.http.*;

public class MyRequestProcessor extends RequestProcessor {

    public MyRequestProcessor() {}

    @Override
    protected boolean processPreprocess(HttpServletRequest request, HttpServletResponse response) {
        boolean continueProcessing = true;
        String remoteHost = request.getRemoteHost();

        // 僅允許 126.* 網段
        if (remoteHost == null || !remoteHost.startsWith("126.")) {
            continueProcessing = false;
            try {
                response.sendRedirect("iperror.jsp");
            } catch (Exception ex) {
                ex.printStackTrace();
            }
        }
        System.out.println("--test--");
        return continueProcessing;
    }
}

步驟三:struts-config.xml 整合自訂 Processor

<controller processorClass="Beans.MyRequestProcessor" />

原理解析

  • Filter:Servlet 規範標準,攔截所有符合 url-pattern 的請求,適合編碼設定、日誌、認證等橫切關注點。
  • RequestProcessor.processPreprocess():Struts 控制器核心流程中的前置擴充點,返回 false 可中斷後續 Action 執行,適合業務層面的存取控制。
  • 兩者互補:Filter 處理「所有請求」的通用邏輯;Processor 處理「Struts 流程」的業務邏輯。

擴充建議

  • 編碼過濾器可支援 UTF-8、自動偵測。
  • IP 白名單/黑名單外部化至資料庫或設定檔,支援熱重載。
  • 整合 Spring Security、Shiro 等專業安全框架取代自製邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved