案例-敏感词汇过滤
案例-敏感词汇过滤
需求:
- 对day_06案例录入的数据进行敏感词汇过滤
- 敏感词汇参考《敏感词汇.txt》
- 如果敏感词汇 替换为***
分析:
- 对request对象进行增强 增强获取参数相关方法
- 放行 传递代理对象
拦截器代码
package com.bai.Filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; 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 SensitivWordsFilter implements Filter { private List<String> list = new ArrayList<String>();//敏感词汇集合 public void init(FilterConfig filterConfig) throws ServletException { try{ //获取文件真实路径 ServletContext servletContext = filterConfig.getServletContext(); String realPath = servletContext.getRealPath("src\\敏感词汇.txt"); //读取文件 BufferedReader br = new BufferedReader(new FileReader(realPath)); //将文件的每一行添加到list中 String line=null; while ((line = br.readLine())!=null){ list.add(line); } br.close(); System.out.println(list); }catch(Exception e){ e.printStackTrace(); } } public void doFilter(final ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { ServletRequest proxy_lenovo = (ServletRequest) Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(), servletRequest.getClass().getInterfaces(), new InvocationHandler() { public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //增强getParameter方法 //判断是否是getParameter方法 if (method.getName().equals("getParameter")){ //增强返回值 //获取返回值 String value = (String) method.invoke(servletRequest, args); if (value!=null){ for (String str : list) { if (value.contains(str)){ value=value.replaceAll(str,"***"); } } } return value; } return method.invoke(servletRequest,args); } }); //放行 filterChain.doFilter(servletRequest,servletResponse); } public void destroy() { } }

浙公网安备 33010602011771号