例:将 “坏蛋” “笨蛋”,变为“***”。
1、敏感词汇
// words.txt
坏蛋
笨蛋
2、首先创建filter
public class FilterDemo implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
// 通过动态代理 来增强 getParameter 方法
ServletRequest obj = (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")) {
// 获取该方法返回的 参数
String values = (String) method.invoke(req, args);
if (values != null) {
for (String str : list) {
// 如果遇到敏感词汇,就将其替代为 ***
if (values.contains(str)) {
values = values.replaceAll(str, "***");
}
}
}
// 增强返回值
return values;
} else {
return method.invoke(req, args);
}
}
});
obj.setCharacterEncoding("utf-8");
// 放行
chain.doFilter(obj, resp);
}
private List<String> list = new ArrayList<String>();
@Override
public void init(FilterConfig config) throws ServletException {
// 加载敏感词汇到list集合
ServletContext context = config.getServletContext();
String path = context.getRealPath("\\WEB-INF\\words.txt");
System.out.println(path);
try {
BufferedReader br = new BufferedReader(new FileReader(path));
String line = "";
while ((line = br.readLine()) != null) {
list.add(line);
}
System.out.println(list);
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、创建servlet 并测试
@WebServlet("/sd")
public class ServletDemo extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
resp.setContentType("text/html;charset=utf-8");
String name = req.getParameter("name");
String msg = req.getParameter("msg");
System.out.println("servlet : "+name + ":" + msg);
}
}
--地址栏信息
--输出