package main.proxy.word;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
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("/wordtest")
public class wordFilter implements Filter {
List<String> list = new ArrayList<String>();
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
ServletRequest proxy1 = (ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if (method.getName().equals("getParameter")) {
String res = (String) method.invoke(req, args);
for (String i : list) {
if (res.contains(i)) {
String rep = "";
for (int j = 0; j < i.length(); j++) {
rep += "*";
}
res=res.replaceAll(i, rep);
}
}
return res;
}
return method.invoke(req, args);
}
});
chain.doFilter(proxy1, resp);
}
public void init(FilterConfig config) throws ServletException {
//获取配置文件中的敏感词文件虚拟路径名称
String xxx = config.getServletContext().getInitParameter("xxx.txt");
//获取真实路径名称
String url = config.getServletContext().getRealPath(xxx);
try {
BufferedReader file = new BufferedReader(new InputStreamReader(new FileInputStream(url),"utf-8"));
String s=null;
while((s=file.readLine())!=null){
list.add(s);
}
System.out.println(list);
file.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}