java 过滤器(过滤客户端表单特殊字符、服务器端特殊字符、以及编码过滤)

原创 2012年03月23日 16:59:49

package com.lk.test;

import java.io.CharArrayWriter;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
//定义具有缓存功能response
public class HttpCharacterResponseWrapper extends HttpServletResponseWrapper {
 //定义字符数组
 private CharArrayWriter cw = new CharArrayWriter();
 
 public HttpCharacterResponseWrapper(HttpServletResponse response) {
  super(response);
 }

 @Override
 public PrintWriter getWriter() throws IOException {
  return new PrintWriter(cw);
 }

 public CharArrayWriter getCw() {
  return cw;
 }

}

//Filter类

package com.lk.test;

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.Properties;
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 OutputReplaceFilter implements Filter {
 
 private Properties pp = new Properties();
 //非法词、敏感词、特殊字符、配置在初始化参数中
 public void init(FilterConfig config) throws ServletException {
   //配置文件位置
   String file = config.getInitParameter("file");
   //文件实际位置
   String realPath = config.getServletContext().getRealPath(file);
   try {
    //加载非法词
    pp.load(new FileInputStream(realPath));
   }  catch (IOException e) {
    e.printStackTrace();
   }
 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  
  HttpServletRequest rq = (HttpServletRequest)request;
  //过滤编码
  if(rq.getMethod().equalsIgnoreCase("post")){
   rq.setCharacterEncoding("utf-8");
  }else{
   Iterator its = rq.getParameterMap().values().iterator();
   while(its.hasNext()){
    String[] params = (String[])its.next();
    int len = params.length;
    for (int i = 0; i < len; i++) {
     params[i] = new String(params[i].getBytes("utf-8"),"utf-8");
    }
   }
  }
  //过滤客户端提交表单中特殊字符
  Iterator its = rq.getParameterMap().values().iterator();
  while(its.hasNext()){
   String[] params = (String[])its.next();
   for (int i = 0; i < params.length; i++) {
    for (Object oj :pp.keySet()) {
     String key = (String)oj;
     params[i] = params[i].replace(key, pp.getProperty(key));
    }
   }
  }
  
  //过滤服务器端的特殊字符(服务器端response输出到客户端的特殊汉字(色情、情色、赌博等))
  response.setCharacterEncoding("utf-8");
  HttpCharacterResponseWrapper rs = new HttpCharacterResponseWrapper((HttpServletResponse)response);
  chain.doFilter(rq, rs);
  //得到response输出内容
  String output = rs.getCw().toString();
  //遍历所有敏感词
  for (Object oj :pp.keySet()) {
   String key = (String)oj;
   //替换敏感词
   output = output.replace(key, pp.getProperty(key));
  }
  //通过原来的response输出内容
  response.getWriter().print(output);
 }

 public void destroy() {
  
 }
}

 

OutputReplaceFilter过滤器类在web.xml中配置

  <filter>
    <filter-name>OutputReplaceFilter</filter-name>
    <filter-class>com.lk.test.OutputReplaceFilter</filter-class>
    <init-param>
     <param-name>file</param-name>
     <param-value>/WEB-INF/sensitive.properties</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>OutputReplaceFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>


 

java过滤特殊字符

/** * 过滤一些特殊字符 */ private static String stringFilter(String str){ String result =...

java 过滤敏感词和特殊字符 防止sql注入

前一段时间,被告知公司主页可以sql注入,所以就写了, 开始想一起过滤敏感词语和特殊字符,网上搜索一遍,感觉没有什么好的方法, 所以借鉴了网上部分思路,总体分2步走, 一是过滤敏感词语,我目前能想到的...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

预防XSS攻击,(参数/响应值)特殊字符过滤

一、什么是XSS攻击 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XS...
  • catoop
  • catoop
  • 2015年12月17日 10:28
  • 20645

filter过滤器过滤特殊字符

主管提出一个需求,

如何用jsp+servlet+fliter实现非法字符过滤

jsp过滤器实现非法字符过滤

java防止页面脚本注入 特殊字符过滤器

转载自:http://yuncode.net/code/c_54a003069e20d32 Step1:自定义封装request ...

用过滤器filter设置编码格式

用过滤器filter设置编码格式

java过滤特殊字符

Java代码   // 过滤特殊字符       public   static   String StringFilter(String   str)   throws   Patt...

HTML特殊字符过滤器

package com.pdsu.filter; import java.io.IOException; import javax.servlet.Filter; import javax.ser...
  • afgasdg
  • afgasdg
  • 2011年11月19日 10:41
  • 5490
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:java 过滤器(过滤客户端表单特殊字符、服务器端特殊字符、以及编码过滤)
举报原因:
原因补充:

(最多只允许输入30个字)