filter对页面内容敏感词进行替换处理

本文介绍了一种利用自定义响应对象和过滤器实现的网页敏感词过滤方案,通过对页面输出内容进行缓存并处理,有效避免非法或敏感信息展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  平时我们做网页时,不希望页面显示一些非法内容或敏感词语,一般的做法是数据保存到数据库前先做处理或者从数据库中拿出来后再处理,然后输出到客户端(浏览器)。这种做法的局限性是,工作量大,很多地方都需要进行处理。如果使用Filter来处理就很简单,很方便了。

     做法:在Servlet将页面内容输出到response时,response将内容缓存起来,然后在Filter中处理,在输出到客户端。

     技术点:由于ServletResponse默认不能严格的缓存输出内容,因此需要自定义一个具备缓存功能的response。扩展javax.servlet.http.HttpServletResponseWrapper类来自定义一个response,该类实现了javax.servlet.http.HttpServletResponse接口的所有方法,根据需要在自己的自定义response中进行覆盖即可,比如需要对页面中的字符类内容进行处理,则覆盖父类getWriter()方法,如果需要处理二进制内容,如图片等,则覆盖父类中的getOutputStream()方法。

     下面给出一个例子源码,对页面中的敏感词语进行替换。

     首先自定义一个response

    

[java]  view plain  copy
  1. package cn.qtone.school.filter;  
  2.   
  3. import java.io.CharArrayWriter;  
  4. import java.io.IOException;  
  5. import java.io.PrintWriter;  
  6.   
  7. import javax.servlet.http.HttpServletResponse;  
  8. import javax.servlet.http.HttpServletResponseWrapper;  
  9. /** 
  10.  * 由于HttpServletResponse并不能严格的缓存输入内容,所以如果想对输入内容 
  11.  * 进行加工,就需要自定义一个具备缓存功能的response 
  12.  * 通过扩展javax.servlet.http.HttpServletResponseWrapper类来自定义自己的response 
  13.  * javax.servlet.http.HttpServletResponseWrapper实现了HttpServletResponse接口的所有 
  14.  * 方法,自定义的response只需根据需要覆盖就行了 
  15.  *<br/> 
  16.  *本类只覆盖getWriter()方法,即只对网页中的字符类内容进行加工 
  17.  */  
  18. public class CharacterResponseWrapper extends HttpServletResponseWrapper{  
  19.   
  20.     private CharArrayWriter charArrayWriter=new CharArrayWriter();//字符数组Writer  
  21.       
  22.     public CharacterResponseWrapper(HttpServletResponse response) {  
  23.         super(response);  
  24.     }  
  25.       
  26.     @Override  
  27.     //覆盖父类方法,如果response输出的内容是字符类内容,则会调用getWriter()方法  
  28.     //如果是二进制内容,如图片数据,则会调用getOutputStream()方法。  
  29.     public PrintWriter getWriter() throws IOException{  
  30.         return new PrintWriter(charArrayWriter);//返回字符数组writer,缓存内容  
  31.     }  
  32.   
  33.     public CharArrayWriter getCharArrayWriter() {  
  34.         return charArrayWriter;  
  35.     }  
  36.       
  37.       
  38. }  


再写个filter

[java]  view plain  copy
  1. package cn.qtone.school.filter;  
  2.   
  3. import java.io.FileInputStream;  
  4. import java.io.IOException;  
  5. import java.io.PrintWriter;  
  6. import java.util.Properties;  
  7.   
  8. import javax.servlet.Filter;  
  9. import javax.servlet.FilterChain;  
  10. import javax.servlet.FilterConfig;  
  11. import