過濾器-無效數據過濾
阿新 • • 發佈:2018-11-26
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 implementsFilter { // 初始化無效數據 private List<String> dirtyData; @Override public void init(FilterConfig filterConfig) throws ServletException { // 模擬幾個數據 dirtyData = new ArrayList<String>(); dirtyData.add("NND"); dirtyData.add("炸使館"); } @Overridepublic 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>
過濾器-無效數據過濾