cx

细心解读,用心领会。

聊天室过滤脏字

1.编写过滤器

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    
          HttpServletRequest req=(HttpServletRequest)request;
          HttpServletResponse rep = (HttpServletResponse)response;          
          //处理获得的参数
          HttpServletRequestWrapper mywrapper = new HttpServletRequestWrapper(req);         
         //执行目标资源(在执行目标资源之前,在mywrapper中将getParameter重写将所有脏字转化,然后将转化后的内容     发给servlet区保存转化后的数据)
          chain.doFilter(mywrapper, response);
          
          

    }

2。在一种用到了HttpServletRequestWrapper 

       public class HttpServletRequestWrapper extends javax.servlet.http.HttpServletRequestWrapper{

    public HttpServletRequestWrapper(HttpServletRequest request) {
        super(request);
        
    }
 
    @Override
    public ServletInputStream getInputStream() throws IOException {

        
        super.setCharacterEncoding("UTF-8");
        ServletInputStream in = super.getInputStream();
        
        BufferedReader  br= new BufferedReader(new InputStreamReader(in));
      
        StringBuffer sb = new StringBuffer();
        String o = br.readLine();
        while(o!=null){
            sb.append(o);
            o = br.readLine();
         }
         //获得输入内容        
         String word = URLDecoder.decode(sb.toString(), "UTF-8");
       
         //检查是否包含脏字 如果有则替换
         BufferedReader wordreader  =  new BufferedReader(new FileReader(ChatDocumentUtil.getWordFile()));
         //获得脏字
         String badword = wordreader.readLine();        
         //逐个读取脏字,如果包含则替换
         while(badword!=null){
            if(word.contains(badword))
            {
             word = word.replace(badword, "*");
            }
             badword=wordreader.readLine();            
         }
         
        //返回输入流
         
         final ByteArrayInputStream bai = new ByteArrayInputStream(word.getBytes());
         
         ServletInputStream sis = new ServletInputStream() {            
            @Override
            public int read() throws IOException {
                
                return bai.read();
            }
        };
        
        return sis;
        
    }



此类继承自HttpServletRequestWrapper,在进入过滤器中会用此类对request进行包装,此类重写getInputStream()方法,在以后的servlet中调用的getInputstream方法时,其实就是调用我们重写的这个方法,在获得数据将其存入xml文件时,就已经将脏字内容给过滤掉了,

getInputStream()方法需返回ServletInputStream 接口



阅读更多
想对作者说点什么? 我来说一句

过滤脏话的filter代码

2014年03月18日 2KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭