1. 程式人生 > >過濾器-無效數據過濾

過濾器-無效數據過濾

war 中文處理 clas dna *** ttr 當前 一個 無效

package com.loaderman.demo.b_filter_data;

import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * 無效數據過濾 * */ public class DateFilter implements
Filter { // 初始化無效數據 private List<String> dirtyData; @Override public void init(FilterConfig filterConfig) throws ServletException { // 模擬幾個數據 dirtyData = new ArrayList<String>(); dirtyData.add("NND"); dirtyData.add("炸使館"); } @Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { // 轉型 final HttpServletRequest request = (HttpServletRequest) req; HttpServletResponse response = (HttpServletResponse) res; // 一、處理公用業務 request.setCharacterEncoding("UTF-8"); // POST提交有效 response.setContentType("text/html;charset=UTF-8"); HttpServletRequest proxy = (HttpServletRequest) Proxy.newProxyInstance( request.getClass().getClassLoader(), // 指定當前使用的累加載器 new Class[]{HttpServletRequest.class}, // 對目標對象實現的接口類型 new InvocationHandler() { // 事件處理器 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { // 定義方法返回值 Object returnValue = null; // 獲取方法名 String methodName = method.getName(); // 判斷:對getParameter方法進行GET提交中文處理 if ("getParameter".equals(methodName)) { // 獲取請求數據值【 <input type="text" name="userName">】 String value = request.getParameter(args[0].toString()); // 調用目標對象的方法 // 獲取提交方式 String methodSubmit = request.getMethod(); // 直接調用目標對象的方法 // 判斷如果是GET提交,需要對數據進行處理 (POST提交已經處理過了) if ("GET".equals(methodSubmit)) { if (value != null && !"".equals(value.trim())){ // 處理GET中文 value = new String(value.getBytes("ISO8859-1"),"UTF-8"); } } // 中文數據已經處理完: 下面進行無效數據過濾 //【如何value中出現dirtyData中數據,用****替換】 for (String data : dirtyData) { // 判斷當前輸入數據(value), 是否包含無效數據 if (value.contains(data)){ value = value.replace(data, "*****"); } } // 處理完編碼、無效數據後的正確數據 return value; } else { // 執行request對象的其他方法 returnValue = method.invoke(request, args); } return returnValue; } }); // 二、放行 (執行下一個過濾器或者servlet) chain.doFilter(proxy, response); // 傳入代理對象 } @Override public void destroy() { } }
package com.loaderman.demo.b_filter_data;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DisServlet extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        // 獲取請求數據
        String content = request.getParameter("content");
        // 保存到request
        request.setAttribute("content", "Content:" + content);
        // 轉發
        request.getRequestDispatcher("/dis.jsp").forward(request, response);

    }

    public void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doGet(request, response);
    }

}
 <!-- 2. 無效數據過濾器配置 -->
    <filter>
        <filter-name>dataFilter</filter-name>
        <filter-class>com.loaderman.demo.b_filter_data.DateFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>dataFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

過濾器-無效數據過濾