`
猪↘專屬|华
  • 浏览: 161465 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

java非法字符过滤器

 
阅读更多

过滤项目中的非法字符,并且用其他的特殊符号过滤:

WordFilter.java

package com.easyweb.web.character;

import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.Iterator;
import java.util.Properties;
import java.util.Random;

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.HttpServletRequestWrapper;

/**
 * 过来非法字符的过滤器
 *
 * @author leo
 *
 */
public class WordFilter implements Filter {

 Properties ps = new Properties(); // properties 属性文件
 Collection con = null; // 非法文字集合(从properties属性文件中读取出来)
 private String encoding; // 字符编码
 private String[] charWorld = new String[] { "~", "@", "#", "$", "%", "^",
   "&", "*" }; // 将非法文字替换成 随机字符

 Random input = new Random(); // 随机产生器(为上面的随机字符提供下标)

 @Override
 public void destroy() {

 }

 @Override
 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  if (encoding != null) {
   request.setCharacterEncoding(encoding); // 设置 request字符编码
   request = new Request((HttpServletRequest) request);
   response.setContentType("text/html;charset=" + encoding); // 设置response字符编码
  }
  chain.doFilter(request, response);
 }

 /**
  * 过滤器初始化参数,与读取非法字符的properties文件
  */
 @Override
 public void init(FilterConfig filterConfig) throws ServletException {
  encoding = filterConfig.getInitParameter("encoding");
  try {
   InputStream in = filterConfig.getServletContext().getResourceAsStream("/wordFilter.properties");
   ps.load(in);
   con = ps.values(); //得到properties中的所有value值,存入collection集合中
  } catch (IOException e) {
   e.printStackTrace();
  }   
 }

 /**
  * 过滤字符的方法
  * @param param
  * @return
  */
 public String filter(String param) {
  // 过滤非法字符的方法
  try {
   if (param != null && param.length() > 0) {
    // 保证传入的字符串不为空和空字符串
    Iterator it = con.iterator(); // 迭代器 可以 把collection中的值一条一条的读出来
    if (con != null) { // 集合要被初始化
     while (it.hasNext()) {
      // 判断集合里是否还有值
      String value = (String) it.next(); // 取出该值
      if (param.indexOf(value) != -1) {
       param = param.replace(value, charWorld[input
         .nextInt(8)]); // 对非法字符词语进行替换
      }
     }
    }
   }
  } catch (Exception e) { // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return param;
 }

 
 //内部类 为了重写request的getParameter 和 getParameterValues
   class Request extends HttpServletRequestWrapper{
     public Request(HttpServletRequest request) {   
      super(request);  
   }
     @Override  
     public String getParameter(String name) {
      //返回值之前 先进行过滤   
      return filter(super.getParameter(name));   
     }
     @Override  
     public String[] getParameterValues(String name) {
      //返回值之前 先进行过滤       
      String[] values = super.getParameterValues(name);     
      for (int i = 0; i < values.length; i++) {    
       values[i] = filter(values[i]);   
      }   
      return values; 
     }
   }

}

分享到:
评论
1 楼 老妖子 2012-06-08  
能把web.xml配置也发出来吗?

相关推荐

    过滤器过滤用户输入的非法字符

    过滤器过滤用户输入的非法字符,如“” “%” “+”等需要的两个类XssFilter.java和XssHttpServletRequestWrapper.java

    过滤器 乱码,非法字符,权限

    此资源系本人在培训机构的资料,资源包含过滤器乱码过滤、过滤非法字符、权限过滤、病毒过滤、HTML标签过滤、js脚本过滤等代码演示实例和讲解文档,内容详细易懂,希望对象大家有所帮助!

    六个有用的java过滤器

    六个有用的java过滤器,包括使浏览器不缓存页面的过滤器、检测用户是否登陆的过滤器、字符编码的过滤器、资源保护过滤器、利用Filter限制用户浏览权限、利用Filter过滤非法关键字。

    浅析JAVA中过滤器、监听器、拦截器的区别

    1.过滤器:所谓过滤器顾名思义是用来过滤的,在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login....

    FilterAndInterceptor

    过滤器--是在java web中,提前过滤掉一些信息或者提前设置一些参数,然后再传入servlet/struts的 action进行业务逻辑处理。比如过滤掉非法url或者在传入servlet/struts的action前统一设置字符集,或者去除掉一些非法...

    预防XSS攻击和SQL注入XssFilter

    一、什么是XSS攻击 ...三、过滤器配置 web.xml配置 &lt;filter-name&gt;XssFilter &lt;filter-class&gt;com.xxx.Filter.XssFilter&lt;/filter-class&gt; &lt;filter-name&gt;XssFilter &lt;url-pattern&gt;/* &lt;/filter-mapping&gt;

    根据java文法生成对应的词法分析器Content description

    包含空白字符的过滤。 包含一些非法输入的处理和注释出错的处理。使用java语言。 包含标识符id,关键字keyword,数字num,运算符operator,分界符separator以及注释doc的辨别. 包含空白字符的过滤。 包含一些...

    java sql注入l

    44 throw new IOException("您发送请求中的参数中含有非法字符"); 45 //String ip = req.getRemoteAddr(); 46 } else { 47 chain.doFilter(args0,args1); 48 } 49 } 50 51 //效验 52 protected ...

    Java开发实战1200例(第1卷).(清华出版.李钟尉.陈丹丹).part3

    实例040 循环体的过滤器 49 实例041 循环的极限 50 第3章 数组与集合的应用 51 3.1 数组演练 52 实例042 获取一维数组最小值 52 实例043 将二维数组中的行列互换 53 实例044 利用数组随机抽取幸运观众 54 实例045 用...

    JspRun!社区论坛系统 v6.0 bulid 090423 GBK 源码版.rar

    2、优化减少过滤器中的sql查询语句 3、优化减少版块帖子列表sql查询语句 4、优化个人空间 5、优化验证问答 6、优化快速编辑帖子的提交方式和帖子附件下载次数 7、优化搜索的排序方式 8、升级优化序列化类 9...

    JspRun!社区论坛系统 v6.0 bulid 090424 GBK 安装版.rar

    2、优化减少过滤器中的sql查询语句 3、优化减少版块帖子列表sql查询语句 4、优化个人空间 5、优化验证问答 6、优化快速编辑帖子的提交方式和帖子附件下载次数 7、优化搜索的排序方式 8、升级优化序列化类 9...

    Guns后台管理系统-其他

    6、防止XSS攻击,通过XssFilter类对所有的输入的非法字符串进行过滤以及替换。 7、简单可用的代码生成体系,通过SimpleTemplateEngine可生成带有主页跳转和增删改查的通用控制器、html页面以及相关的js,还可以生成...

Global site tag (gtag.js) - Google Analytics