常見需求:統一設定請求編碼、依 IP 限制存取。利用 Servlet Filter 與 Struts RequestProcessor 擴充點,兩步驟完成。
<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>
放置於專案原始碼目錄 (如 /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;
}
}
<controller processorClass="Beans.MyRequestProcessor" />
url-pattern 的請求,適合編碼設定、日誌、認證等橫切關注點。false 可中斷後續 Action 執行,適合業務層面的存取控制。UTF-8、自動偵測。