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