欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

springboot项目结合filter,jdk代理实现敏感词过滤(简单版)

程序员文章站 2022-06-15 10:17:46
我们对getParameter()这个方法得到的参数进行敏感词过滤。实现思路:利用过滤器拦截所有的路径请求同时在在过滤器执行的时候对getParameter得到的value值进行过滤。最后呢,到我们自己的实现的逻辑中呢?这个value值就被我们做过处理了。1:自定义的过滤配置文件把文件位置放在resource下的static目录下,内容如下2:编写我们的过滤器遇到的问题:拿取不到resource/static/sensitive.txt文件。好在解决了哈哈哈哈哈哈看代码吧!!!!@WebFil...

我们对getParameter()这个方法得到的参数进行敏感词过滤。
实现思路:利用过滤器拦截所有的路径请求同时在在过滤器执行的时候对getParameter得到的value值进行过滤。最后呢,到我们自己的实现的逻辑中呢?这个value值就被我们做过处理了。

1:自定义的过滤配置文件

把文件位置放在resource下的static目录下,内容如下
springboot项目结合filter,jdk代理实现敏感词过滤(简单版)

2:编写我们的过滤器

遇到的问题:拿取不到resource/static/sensitive.txt文件。好在解决了哈哈哈哈哈哈看代码吧!!!!
jdk代理的知识

@WebFilter("/*") public class filtersensitive implements Filter { ArrayList<String> list = new ArrayList<String>(); //     这种写法会报错,我也是醉了 // @Value("classpath:static/sensitive.txt") // private Resource resource; /**
     * @param
     * @method 初始化我们的过滤词的配置
     */ @Override public void init(FilterConfig filterConfig) throws ServletException { try { String line; //读取我们的过滤配置文件 File resource = ResourceUtils.getFile("classpath:static/sensitive.txt"); BufferedReader sensitivewords = new BufferedReader(new FileReader(resource)); //把读取到的信息,存放到list中 while ((line = sensitivewords.readLine()) != null) { list.add(line); } } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /**
     * @param
     * @method 这里只针对request中的getParameter方法进行敏感词过滤
     */ @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; HttpServletResponse resp = (HttpServletResponse) servletResponse; //jdk动态代理的使用,我写过这个的文章哦 HttpServletRequest request = (HttpServletRequest) Proxy.newProxyInstance( req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() { @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { //拦截getParameter方法 if ("getParameter".equals(method.getName())) { //调用getParameter方法的到value String values = (String) method.invoke(req, args); //如果有getParameter的调用,则会进行过滤并且返回经过处理的返回值,其他的直接放行 if (values != null) { //与我们初始化的list比较是否要过滤 for (String s : list) { if (values.contains(s)) { values = values.replaceAll(s, "*"); System.out.println("过滤成功"); } } } return values; } else { return method.invoke(req, args); } } }); //放行 filterChain.doFilter(request, resp); } @Override public void destroy() { } } 

3:注册过滤器

emmmm以前就是老是忘记注册了,哈哈哈哈哈哈最后气的半死

@Configuration public class filterConfig { /**
     * @param
     * @method 注册拦截器
     */ @Bean public FilterRegistrationBean addMyFilter() { filtersensitive filterSensitive = new filtersensitive(); FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(); filterRegistrationBean.setFilter(filterSensitive); filterRegistrationBean.addUrlPatterns("/*"); return filterRegistrationBean; } } 

4:测试

emmm我们在这里写个爸爸哈哈哈哈
springboot项目结合filter,jdk代理实现敏感词过滤(简单版)完了爸爸被屏蔽了,包括儿子,妈妈都是这样了,一家子整整齐齐的哈哈哈哈哈哈
springboot项目结合filter,jdk代理实现敏感词过滤(简单版)

本文地址:https://blog.csdn.net/qq_42875345/article/details/108871604