聊天室过滤脏字

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 接口



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值