利用J2EE的Filter对所有提交参数进行过滤
1、获取request下面的所有参数内容;
2、把每个参数进行过滤处理(利用脏字过滤字典对其进行过滤);
3、再把过滤好的内容重新存入request的参数中。

解决方案 »

  1.   

    提交的时候strut2  会将reuest  , form 里面的数据封装好,此时可以对数据 进行过滤处理。
      

  2.   

    只要是中文分词,  你看下lucene,ikanalyzer 相关的东西. 
      

  3.   

    读取words.properties里面的内容,把每个需要替换的内容都放进一个list,把要过滤的整个内容循环替换掉这个list里面的内容为*
      

  4.   

    比如words.properties的内容为脏字干
    脏字草然后在过滤器里面这么做:
    1、读取words.properties内容存到list:List a = new ArrayList();
    a.add("脏字干");
    a.add("脏字草");2、String b = "羊吃草嗖嗖嗖干嗖嗖嗖";
    for(int i = 0; i < a.size(); a++) {
    b=b.replaceAll(a.get(i),"*")
    }
      

  5.   

    正则表达式
    String regex=“(wqnmlgb  |   nnd)”;
    String replaceAll( regex  ,"***")
      

  6.   

    我有,是直接输入存到数据库时候敏感字已经变成*了。package com.store.web.action.validate;import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.logging.LogRecord;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.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    /*屏蔽敏感词汇过滤器*/
    public class ContentFilter extends HttpServlet implements Filter { /**
     * 
     */
    private static final long serialVersionUID = 1L;
    private FilterConfig filterConfig; public void init(FilterConfig filterConfig) throws ServletException {
    this.filterConfig = filterConfig;
    } @SuppressWarnings("null")
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain filterChain) {
    //读取配置文件txt
    InputStream in = ContentFilter.class.getClassLoader().getResourceAsStream("words1.txt");

    StringBuilder sb = new StringBuilder();
    String line;
    try {
    BufferedReader reader = new BufferedReader(new InputStreamReader(in, "UTF-8"));
    while ((line = reader.readLine()) != null) {
    sb.append(line).append("\n");} } catch (Exception e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    String sss=sb.toString().trim();

    String ss=sss.replace("\n", "");//消除换行

    String[] filterString=ss.split(",");



    String str = ""; try {
    request.setCharacterEncoding("utf-8");
    HttpServletRequest req = (HttpServletRequest) request;
    String filterParam = req.getParameter("news.content"); if (filterParam!=null || !(filterParam.trim().length() > 0)) {
    for (int i = 0; i < filterString.length; i++) {
    str = filterString[i];
    if (filterParam.indexOf(str) != -1)
    filterParam = filterParam.replaceAll(str, "<font color=red>****</font>");
    }
    req.getSession().setAttribute("content", filterParam);

    }
    filterChain.doFilter(request, response);
    } catch (ServletException sx) {
    filterConfig.getServletContext().log(sx.getMessage());
    } catch (IOException iox) {
    filterConfig.getServletContext().log(iox.getMessage());
    }
    } public void destroy() {
    } public boolean isLoggable(LogRecord record) {
    // TODO Auto-generated method stub
    return false;
    }
    }你自己写个txt文件里面存敏感字就行了。具体你自己调用。
      

  7.   

    用replaceAll就是虐待CPU。这种应用是用分词系统来做的,随便看看ikanalyzer 、庖丁解牛、mmseg4j,哪个不是每秒百万级字符处理。
    将官方的词典删除,用脏词库代替,然后对文章内容切词,每个结果都会告诉命中了什么词,在哪个位置,性能相当高。参考:
    ikanalyzer 
    庖丁解牛
    mmseg4j