Filter - 通过拦截器与动态代理实现敏感词汇过滤
需求:将敏感词汇.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 - 通过拦截器与动态代理实现敏感词汇过滤相关推荐
- AOP 拦截器 JDK动态代理机制 struts2 mybatis spring-aop
struts2拦截器兑现原理(转) struts2拦截器实现原理(转) 第一步:创建目标对象的接口 /** * 目标对象的接口 JDK的动态代理要求目标对象必须实现一个接口 * * @author ...
- spring过滤器Filter 、 拦截器Interceptor 、 切片Aspect 详解
springboot 过滤器Filter vs 拦截器Interceptor vs 切片Aspect 详解 1 前言 最近接触到了过滤器和拦截器,网上查了查资料,这里记录一下,这篇文章就来仔细剖析下过 ...
- (十六)ATP应用测试平台——java应用中的过滤器Filter、拦截器Interceptor、参数解析器Resolver、Aop切面,你会了吗?
前言 过滤器Filter.拦截器Interceptor.参数解析器Resolver.Aop切面是我们应用开发中经常使用到的技术,到底该如何使用这些web附属功能, 本小节我们就分别介绍一下其各自的用法 ...
- 从零开始SpringCloud Alibaba实战(59)——过滤器filter、拦截器interceptor、和AOP的区别与联系及应用
文章目录 前言 过滤器 拦截器 过滤器与拦截器的区别 AOP(面向切面) 三者使用场景 Filter过滤器 Interceptor拦截器 Spring AOP拦截器 Filter与Intercepto ...
- 过滤器(Filter)和拦截器(Interceptor)的区别
来自:http://www.cnblogs.com/luoyun/archive/2013/01/04/2844274.html 过滤器(Filter)和拦截器(Interceptor)的区别 Fil ...
- AOP、Filter、拦截器,花落知多少
AOP在上篇文章--编程新贵AOP中已经进行了阐述. 那么现在说的Filter和拦截器又都是什么概念呢? Filter技术是Servlet2.3新增加的功能,Servlet2.3是sun公司于2000 ...
- 11.6 使用拦截器插件扩展代理功能
博客已搬家, 更好阅读体验, 猛戳 http://www.jack-yin.com/coding/translation/activemq-in-action/1727.html 11.6 Exten ...
- 动态代理的分析以及利用动态代理模式进行敏感词汇过滤
动态代理 增强对象的功能: 设计模式:一些通用的解决固定问题的方式 代理模式 概念: (1). 真实对象:被代理的对象 (2). 代理对象: (3). 代理模式:代理对象代理真实对象,达到增强真实对象 ...
- 基于ik分词器和布隆过滤器实现敏感词过滤
文章目录 准备阶段 为何选用IK Analyzer 什么是布隆过滤器 开发过程 整合Ik 总结 <基于ik分词器和布隆过滤器实现敏感词过滤>首发 牧马人博客转发请加此提示 最近公司业务有个 ...
最新文章
- 用nginx搭建基于rtmp或者http的flv、mp4流媒体服务器
- Python学习笔记__8章错误、调试和测试__8.1章错误处理
- 北京师范大学计算机应用基础考试,北京师范大学-计算机应用基础作业(一至九全套)...
- 如何看别人网络下计算机,如何查看电脑是否被他人偷偷使用过网络技巧 -电脑资料...
- JavaWeb调用python脚本(可传参)
- .NET CORE——Console中使用依赖注入
- 什么是ctfmon.exe,为什么运行?
- HTML 密码加密方法
- 制作bin文件.c解读
- 大学本科计算机专业的课程
- 【腾讯BUG】QQ群贴超大表情BUG,恶意炸群BUG
- java中关于json传图片的方法
- java统计字数_JAVA 仿 MS word 字数统计
- 如何基于已有的 REST API 实现 GraphQL API
- 消息循环中的TranslateMessage函数和DispatchMessage函数
- 3D激光SLAM:ALOAM---gazebo仿真测试场景搭建
- 2016年浙江财经大学信工学院程序设计竞赛题解
- 3032. 是坚挺数吗?
- 计算机主机房临时停电应急预案,校园网中心机房停电应急预案管理规定
- web应用存在的10大安全问题,安全测试不容忽视!