HttpReqWrapper.java
package com.lvwang.utils.filters;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class HttpReqWrapper extends HttpServletRequestWrapper {
private Map< String,String> map = null;
public HttpReqWrapper(HttpServletRequest request) {
super(request);
}
// 过滤脏话
public String replace(String str){
StringBuffer sb = new StringBuffer(str);
Set keys = this.getMap().keySet();
Iterator it = keys.iterator();
String ss = null;
while(it.hasNext()) {
String key = (String) it.next();
int index = sb.indexOf(key);
if(index != -1) {
if(key != null)
ss = key;
sb.replace(index, index+key.length(), this.getMap().get(key));
}
}
if(ss!=null) {
if (sb.toString().indexOf(ss) == -1) {
return sb.toString();
} else {
return replace(sb.toString());
}
}
return sb.toString();
}
// 重写getParameter()方法
public String getParameter(String str) {
if(str.equals("pager.offset")){
return super.getParameter(str);
}else{
String content = super.getParameter(str);
if(content!=null)
return replace(content);
else
return null;
}
}
public Map< String,String> getMap() {
return map;
}
public void setMap(Map< String,String> map) {
this.map = map;
}
}
package com.lvwang.utils.filters;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class WordsFilter implements Filter {
private Map< String, String>map = new HashMap< String, String>();
// 过滤器的初始化
public void init(FilterConfig config) throws ServletException {
String filePath = config.getInitParameter("filePath");
// 从配置文件中取得文件的相对路径
ServletContext context = config.getServletContext();
String realPath = context.getRealPath(filePath);
// 根据相对路径取得绝对路径
try {
FileReader freader = new FileReader(realPath);
// 根据绝对路径,通过文件流来读取文件
BufferedReader br = new BufferedReader(freader);
String line = null;
while((line=br.readLine()) != null) {
line=new String(line.getBytes("GBK"),"UTF-8");
String []str = line.split("=");
if(str!=null&&str.length>=2)
map.put(str[0], str[1]);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// 乱码处理
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
HttpServletRequest HttpReq = (HttpServletRequest) request;
HttpReqWrapper hrw = new HttpReqWrapper(HttpReq);
hrw.setMap(map);
chain.doFilter(hrw, response);
}
public void destroy() {
}
}