太晚了,就不文字说明了直接贴代码,注意增强的是相关方法与参数

package cn.itcast.web.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 SensitiveFilter implements Filter {public void destroy() {}public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {//创建代理对象增强getParameter方法实现过滤ServletRequest proxy_req = (ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//增强getParameter方法//判断是否为getParameter方法      if (method.getName().equals("getParameter")) {//增强返回值//获得返回值String value = (String) method.invoke(req, args);if(value != null){for (String str : list) {if(value.contains(str)){value  = value.replaceAll(str, "***");}}}return value;}return method.invoke(req,args);//注意这块传递的是真实对象,与参数}});chain.doFilter(proxy_req, resp);}private List<String> list = new ArrayList<String>();//敏感词汇的listpublic void init(FilterConfig config) throws ServletException {try {//1.加载配置文件,获得文件的realPathServletContext servletContext = config.getServletContext();//servletContext是一个域对象,可以读取全局配置参数String realPath = servletContext.getRealPath("/WEB-INF/classes/sensitive.txt");//获取文件的一个真实路径//2.读取文件BufferedReader br = new BufferedReader(new FileReader(realPath));//此时数据以及加载到BufferedReader缓冲器中//3.读取br将每一行数据添加到list集合中String line = null;while((line = br.readLine())!= null){list.add(line);}br.close();System.out.println(list);} catch ( Exception e) {e.printStackTrace();}}}

Filter实现敏感词汇过滤相关推荐

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

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

  2. Java基于Socket实现聊天、群聊、敏感词汇过滤功能

    首先的话,这个代码主要是我很久以前写的,然后当时还有很多地方没有理解,现在再来看看这份代码,实在是觉得丑陋不堪,想改,但是是真的改都不好改了- 所以,写代码,规范真的很重要. 实现的功能: 用户私聊 ...

  3. 优秀博客 --敏感词汇过滤

    2019独角兽企业重金招聘Python工程师标准>>> 敏感词汇过滤 http://www.cnblogs.com/chenssy/p/3751221.html#2966041 树上 ...

  4. 【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)

    在敏感词汇过滤这块,不同的算法所造成的性能差异是非常大的,选择一个合适的算法非常重要.因为以前做算法的时候做过类似前缀树的字符串匹配之类的算法,所以一开始就打算用前缀树做的,后面了解了一下DFA的相关 ...

  5. PHP敏感词汇过滤SDK(树形结构遍历命中违禁词)

    先介绍一下匹配敏感词原理吧,因为没有工具,画的很糙,有疑问直接联系我.(绿色箭头代表命中敏感词,灰色:未命中) base 确定有穷自动机(DFA)算法 比如说"可以"是敏感词,那么 ...

  6. Filter - 通过拦截器与动态代理实现敏感词汇过滤

    需求:将敏感词汇.txt文件中的词语过滤为 -> "***" 分析: 首先加载文档,将文档中的词汇纳入集合中备用,方便后期比对使用. 使用Proxy动态代理将request对 ...

  7. 敏感词汇过滤(不区分大小写)

    最近项目中,用户评论内容需要屏蔽敏感词汇,从网上总结以下方法,(不区分大小写,如想设置大小写敏感,可以把代码中content..toLowerCase()去掉).具体看代码: 1.读取敏感词汇文档 & ...

  8. C#敏感词汇过滤(不是正则)

    System.Text.StringBuilder sb = new System.Text.StringBuilder(text.Length);   string filterText = &qu ...

  9. 小程序敏感词汇过滤之输入什么都返OK

    1.post提交 2.post过去的数据编码为utf-8   注意:不仅仅是评论内容为utf-8,不然会导致你输入什么都返回ok $msg = json_encode(array('content'= ...

  10. JSP和敏感词汇过滤

    1.JSP 1.1 JSP概述 全称: Java Server Page      Java服务器页面,和Servlet一样,都是Sun公司提供的动态资源开发技术.兼容HTML,CSS,JavaScr ...

最新文章

  1. Ubuntu Linux 16.04 xfce下最漂亮的系统字体------文鼎粗钢笔楷体安装记录
  2. AIX主机信任关系配置
  3. 基于matlab的车牌识别系统设计错误,基于MATLAB的车牌识别系统设计
  4. java 设计模式学习笔记四 prototype模式
  5. VOS3000 8.05安装及源码
  6. MySQL建表语句解析表名
  7. 百战学堂python教学文档_尚学堂百战程序员:python对文件的操作
  8. IDA Pro、OllyDbg、LordPE和UltraEdit简单实用实验
  9. matlab 莫比乌斯曲面,教你Rhino“3步”快速打造循环曲面“莫比乌斯”
  10. SpringBoot-Bean作用域
  11. 关于o1,o2,o3
  12. Microsoft Teams显示连接不上网
  13. CDH6.2配置spark.yarn.jars目录
  14. 2012总结之pcode.DefineClass
  15. AI 量化机器人,人工智能如何助你从股市发家?
  16. props的基本使用和特点
  17. 2021届双非学生考西北区国家电网第一批(计算机类)经验分享
  18. 网络访问之——HTTP
  19. 从苏宁电器到卡巴斯基第10篇:我在苏宁电器当营业员 II
  20. 自动控制原理《线性系统的时域分析》

热门文章

  1. matlab生成pdf报告,MATLAB发布代码---生成文档pdf
  2. GitHub Windows 客户端使用教程
  3. 用C++程序理解汉字的机内码表示
  4. 上银驱动器使用手册_上银伺服电机调试说明书PPT课件
  5. canvas实现背景图和二维码合并-生成海报
  6. mybatis xml注释sql 的注意事项
  7. S7-1500系统内使用ET200S 1SI模块实现Modbus 从站通信
  8. 【openeuler 21.3】Linux硬盘分区、更改/home目录挂载空间及root目录扩容
  9. apicloud开发之使用usb真机同步到安卓虚拟机
  10. 天天生鲜项目——商品详情页