需求:将敏感词汇.txt文件中的词语过滤为 -> "***"

分析:

首先加载文档,将文档中的词汇纳入集合中备用,方便后期比对使用。

使用Proxy动态代理将request对象的getParameter方法增强,使用反射得到getParameter方法中的字符串(从请求中带来的),与前面提取出来的敏感词汇进行对比 - 判断,最后返回覆盖敏感词汇的字符串,覆盖getParameter方法。

将放行中的request对象替换为Proxy返回的proxy_req

实现:

package cn.xxx.web.filter;
/*** Created by 加班狂人 on 2022/7/18 9:40*/import javax.servlet.*;
import javax.servlet.annotation.*;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
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 SensitiveWordFilter implements Filter {private List<String> list = new ArrayList<String>();//敏感词汇集合public void init(FilterConfig config) throws ServletException {try {//获取文件真实路径ServletContext servletContext = config.getServletContext();String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");//读取文件BufferedReader bf = new BufferedReader(new FileReader(realPath));//将文件的每一行数据都加入到list中String line = null;while ((line = bf.readLine()) != null){list.add(line);}bf.close();System.out.println(list);} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}public void destroy() {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws ServletException, IOException {//创建代理对象,增强getParameter方法ServletRequest proxy_req = (ServletRequest) Proxy.newProxyInstance(request.getClass().getClassLoader(), request.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//增强getParameter方法if ("getParameter".equals(method.getName())){//增强返回值String value = (String) method.invoke(request,args);if (value != null){for (String str : list) {if (value.contains(str)){//说明包含敏感词汇value = value.replaceAll(str,"***");}}}return value;//覆盖getParameter}return method.invoke(request,args);}});//放行chain.doFilter(proxy_req, response); //将放行对象换成 req}
}

通过写一个简单的servlet来测试一下:

package cn.xxx.web.servlet;
/*** Created by 加班狂人 on 2022/7/18 10:18*/import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;@WebServlet(name = "TestServlet", value = "/testServlet")
public class TestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {String name = request.getParameter("name");String msg = request.getParameter("msg");System.out.println(name+":"+msg);}
}

测试结果:启动tomcat服务器,在地址栏访问testServlet并加上敏感词汇

http://localhost:8080/case/testServlet?name=王五&msg=莎碧

王五:***

太暴力就不演示了,很难过审

Filter - 通过拦截器与动态代理实现敏感词汇过滤相关推荐

  1. AOP 拦截器 JDK动态代理机制 struts2 mybatis spring-aop

    struts2拦截器兑现原理(转) struts2拦截器实现原理(转) 第一步:创建目标对象的接口 /** * 目标对象的接口 JDK的动态代理要求目标对象必须实现一个接口 *  * @author ...

  2. spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解

    springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过 ...

  3. (十六)ATP应用测试平台——java应用中的过滤器Filter、拦截器Interceptor、参数解析器Resolver、Aop切面,你会了吗?

    前言 过滤器Filter.拦截器Interceptor.参数解析器Resolver.Aop切面是我们应用开发中经常使用到的技术,到底该如何使用这些web附属功能, 本小节我们就分别介绍一下其各自的用法 ...

  4. 从零开始SpringCloud Alibaba实战(59)——过滤器filter、拦截器interceptor、和AOP的区别与联系及应用

    文章目录 前言 过滤器 拦截器 过滤器与拦截器的区别 AOP(面向切面) 三者使用场景 Filter过滤器 Interceptor拦截器 Spring AOP拦截器 Filter与Intercepto ...

  5. 过滤器(Filter)和拦截器(Interceptor)的区别

    来自:http://www.cnblogs.com/luoyun/archive/2013/01/04/2844274.html 过滤器(Filter)和拦截器(Interceptor)的区别 Fil ...

  6. AOP、Filter、拦截器,花落知多少

    AOP在上篇文章--编程新贵AOP中已经进行了阐述. 那么现在说的Filter和拦截器又都是什么概念呢? Filter技术是Servlet2.3新增加的功能,Servlet2.3是sun公司于2000 ...

  7. 11.6 使用拦截器插件扩展代理功能

    博客已搬家, 更好阅读体验, 猛戳 http://www.jack-yin.com/coding/translation/activemq-in-action/1727.html 11.6 Exten ...

  8. 动态代理的分析以及利用动态代理模式进行敏感词汇过滤

    动态代理 增强对象的功能: 设计模式:一些通用的解决固定问题的方式 代理模式 概念: (1). 真实对象:被代理的对象 (2). 代理对象: (3). 代理模式:代理对象代理真实对象,达到增强真实对象 ...

  9. 基于ik分词器和布隆过滤器实现敏感词过滤

    文章目录 准备阶段 为何选用IK Analyzer 什么是布隆过滤器 开发过程 整合Ik 总结 <基于ik分词器和布隆过滤器实现敏感词过滤>首发 牧马人博客转发请加此提示 最近公司业务有个 ...

最新文章

  1. 用nginx搭建基于rtmp或者http的flv、mp4流媒体服务器
  2. Python学习笔记__8章错误、调试和测试__8.1章错误处理
  3. 北京师范大学计算机应用基础考试,北京师范大学-计算机应用基础作业(一至九全套)...
  4. 如何看别人网络下计算机,如何查看电脑是否被他人偷偷使用过网络技巧 -电脑资料...
  5. JavaWeb调用python脚本(可传参)
  6. .NET CORE——Console中使用依赖注入
  7. 什么是ctfmon.exe,为什么运行?
  8. HTML 密码加密方法
  9. 制作bin文件.c解读
  10. 大学本科计算机专业的课程
  11. 【腾讯BUG】QQ群贴超大表情BUG,恶意炸群BUG
  12. java中关于json传图片的方法
  13. java统计字数_JAVA 仿 MS word 字数统计
  14. 如何基于已有的 REST API 实现 GraphQL API
  15. 消息循环中的TranslateMessage函数和DispatchMessage函数
  16. 3D激光SLAM:ALOAM---gazebo仿真测试场景搭建
  17. 2016年浙江财经大学信工学院程序设计竞赛题解
  18. 3032. 是坚挺数吗?
  19. 计算机主机房临时停电应急预案,校园网中心机房停电应急预案管理规定
  20. web应用存在的10大安全问题,安全测试不容忽视!

热门文章

  1. 腾讯云数据库导入到本地
  2. 山东大学软件学院创新实训——飞讯(十一)
  3. 华为电视要实现千万出货量,价格战是不可缺少的手段
  4. 完全备份 、差异备份、增量备份的区别和特点
  5. 战争磨盘十五:一擒孙有才
  6. 卷积神经网络的卷积运算,卷积神经网络里的卷积
  7. 洛谷 数独 详细解析
  8. 最具创新混凝土搅拌机
  9. 工作五年以上的 UI 设计师都在干什么?
  10. 论我的十大罪过和老婆的十大优点