过滤器 过滤关键字



import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import java.io.*;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.ArrayList;
import java.util.List;

@WebFilter("/*")
public class CheckWordFilter implements Filter {
public void destroy() {
}

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//创建代理对象,增强getParameter方法
ServletRequest req_proxy=(ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//判断方法是否为getParameter方法
if(method.getName().equals("getParameter")){
//增强getParameter方法
//获取返回值
String value = (String) method.invoke(req, args);
if(value!=null){
for (String str : list) {
if(value.contains(str)){
value=value.replaceAll(str,"***");
}
}
}
return value;
}
return method.invoke(req, args);
}
});
chain.doFilter(req_proxy,resp);
}
private List<String> list=new ArrayList<String>();
public void init(FilterConfig config) throws ServletException {
try{
//获取文件真实路径
ServletContext servletContext = config.getServletContext();
String realPath = servletContext.getRealPath("/WEB-INF/classes/checkword.txt");
//读取文件
InputStreamReader isr = new InputStreamReader(new FileInputStream(realPath), "UTF-8");
BufferedReader br = new BufferedReader(isr);
//定义读取的长度
String line=null;
while ((line=br.readLine())!=null){
list.add(line.trim());
}
br.close();
//System.out.println(list);
for (String s : list) {
System.out.println(s);
}
} catch (Exception e){
e.printStackTrace();
}

}

}
posted @ 2019-12-20 16:12  小码日记园  阅读(294)  评论(0编辑  收藏  举报