例:將 “壞蛋” “笨蛋”,變爲“***”。
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);
}
}
--地址欄信息
--輸出