一个门户上的简单留言功能。提交敏感词汇的时候自动过滤掉。请问如何实现啊。大家谁做过有没有这样的例子麻烦发我一下啊。[email protected]

解决方案 »

  1.   

    我没有做过。但是给你说下我的思路啊
    1.用表或者文件保存需要过滤的关键字。这里我感觉用XML文件保存就可以了,甚至用文本文件也未尝不可。
    2.提供一个方法读取这个保存过滤关键字的XML文件或者文本文件。如:
      public String[] getFilterWords(){}
    3.当用户写了留言,提交的时候,就把留言的字符替换。如:
      String str = "留言的字符内容";
      for(String filterWord : getFilterWords()) {
          str.replace(filterWord , "*");
      }
      

  2.   


    可以利用 JSP 的自定义标签来进行关键字过滤;
      

  3.   

    /**默认读取的过滤词文件*/
        public final static String DEFAULT_FILENAME = "keyWord.properties";
        
        public final static String FILENAME_FOR_DOCTITLE = "keyWordForTitle.properties";
        
        private static Map<String, String> keywords = new HashMap<String, String>();
        
        private static Map<String, Pattern> patterns = new HashMap<String, Pattern>();    static {
            try {
             /**默认读取keyWord.properties文件*/
             readFile(DEFAULT_FILENAME);
            } catch (Exception e) {
                logger.error("init Error!", e);
            }
        }    private static void readFile(String filename){
         try{
         if(patterns.containsKey(filename)){
         return;
         }
        
         StringBuffer patternBuf = new StringBuffer("");
            InputStream in = KeyWordFilter.class.getClassLoader().getResourceAsStream(filename);
            if (null == in) {
                in = KeyWordFilter.class.getClassLoader().getResourceAsStream(
                    "META-INF/" + filename);
            }
            InputStreamReader isr = new InputStreamReader(in, "UTF-8");
            BufferedReader br = new BufferedReader(isr);
            patternBuf.append("(");
            String keyword = null;
            while((keyword = br.readLine()) != null){
             patternBuf.append(keyword + "|");
            }
            patternBuf.deleteCharAt(patternBuf.length() - 1);
            patternBuf.append(")");
            String keyWords = patternBuf.toString();
            keywords.put(filename, keyWords);
            patterns.put(filename, Pattern.compile(keyWords));
         }catch (Exception e) {
                logger.error("read file: " + filename, e);
            }
        }
        
        public static String doFilter(String content) {
            return doFilter(content, DEFAULT_FILENAME);
        }    public static boolean doChecker(String content) {
         return doChecker(content, DEFAULT_FILENAME); 
        }
        
        public static String doFilter(String content, String filename) {
         if(null == content){
         return null;
         }
        
         readFile(filename);
         Pattern pattern = patterns.get(filename);
            Matcher m = pattern.matcher(content);
            content = m.replaceAll("");
            return content;
        }    public static boolean doChecker(String content, String filename) {
         if(null == content){
         return false;
         }
        
         readFile(filename);
         Pattern pattern = patterns.get(filename);
            Matcher m = pattern.matcher(content);
            return m.find();
        }        public static void main(String[] args) {
                String test1 = "订票";
                System.out.println(KeyWordFilter.doChecker(test1));
                System.out.println(KeyWordFilter.doFilter(test1));
                
                System.out.println(KeyWordFilter.doChecker(test1, FILENAME_FOR_DOCTITLE));
                System.out.println(KeyWordFilter.doFilter(test1, FILENAME_FOR_DOCTITLE));
            }写几个敏感词文件就行了
      

  4.   


    KeyWordFilter这个是什么东西???
      

  5.   

    public class FilterTest extends HttpServlet implements Filter {
       private FilterConfig filterConfig;   public void init(FilterConfig filterConfig) throws ServletException {
           this.filterConfig = filterConfig;
       }   public void doFilter(ServletRequest request, ServletResponse response,
                            FilterChain filterChain) {
           String[] filterString = {"AAA", "vbb", "vvv", "", ""};//过滤字符串
           String str = "";       try {
               request.setCharacterEncoding("utf-8");
               HttpServletRequest req= (HttpServletRequest) request;
               String filterParam= req.getParameter("filterParam");           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,"******");
                   }
                   req.setAttribute("filterParam", filterParam);
               }
               filterChain.doFilter(request, response);
           } catch (ServletException sx) {
               filterConfig.getServletContext().log(sx.getMessage());
           } catch (IOException iox) {
               filterConfig.getServletContext().log(iox.getMessage());
           }
       }
       public void destroy() {
       }
    }
      

  6.   


    package filter;import java.io.CharArrayWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.StringTokenizer;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.HttpServletResponse;
    import javax.servlet.http.HttpServletResponseWrapper;public class IllegalContentFilter implements Filter {
        protected FilterConfig filterConfig;    public void destroy() {
            this.filterConfig = null;
        }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            request.setCharacterEncoding("gbk");
            response.setCharacterEncoding("gbk");        HttpServletResponse res = (HttpServletResponse) response;
            PrintWriter out = response.getWriter();
            WrapperImpl wrapper = new WrapperImpl(res);        chain.doFilter(request, wrapper);
            
            out.println(replaceIllegalContent(wrapper.toString(), filterConfig.getInitParameter("illegalContent"), filterConfig.getInitParameter("replaceString")));
        }    public void init(FilterConfig filterConfig) throws ServletException {
            this.filterConfig = filterConfig;
        }    public String replaceIllegalContent(String content, String illegalContent, String replaceString) {
            if (content == null || content.trim().equals("") || illegalContent == null || illegalContent.trim().equals("") || replaceString == null || replaceString.trim().equals("")) {
                System.err.println("缺少必要的属性无法过滤 返回传进来的内容");
            } else {
                for (StringTokenizer tokenizer = new StringTokenizer(illegalContent, ",", false); tokenizer.hasMoreTokens();) {
                    content = content.replaceAll(tokenizer.nextToken(), replaceString);
                }
            }
            return content;
        }    private class WrapperImpl extends HttpServletResponseWrapper {
            private CharArrayWriter output;        public WrapperImpl(HttpServletResponse response) {
                super(response);
                output = new CharArrayWriter();
            }        public String toString() {
                return output.toString();
            }        public PrintWriter getWriter() {
                return new PrintWriter(output);
            }
        }
    }web.xml code<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">    <filter>
            <filter-name>illegalFilter</filter-name>
            <filter-class>filter.IllegalContentFilter</filter-class>
            <init-param>
                <param-name>illegalContent</param-name>
                <param-value>
                    去你吗的,草你吗,草你妈,操你妈,靠,SB,傻B,傻逼,我日,日你娘,干你娘,上你妈,毛泽东,组织,开枪,马克思,列宁,恩格斯,周恩来
                </param-value>
            </init-param>
            <init-param>
                <param-name>replaceString</param-name>
                <param-value>[河蟹]</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>illegalFilter</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>
    </web-app>
      

  7.   

    参考http://download.csdn.net/source/1537199