1,基本功能

在提交数据时,常常需要检查数据中是否含有敏感词汇,有的话,需要屏蔽敏感词汇

2,实现原理

我们可以使用Filter过滤器,对数据进行检查与处理,将处理完毕的数据放行。因此,在javaweb中,我们可以先在Filter中,对数据进行处理。可以使用动态代理的方式进行。

动态代理:

即在内存中形成代理类,可以对真实对象做增强操作。

3,实现步骤

1,对request对象进行加强,增强获取参数相关方法

2,放行,传递代理对象

4,代码实现

1,在src目录下生成 敏感词汇.txt

2,过滤器代码

先使用流加载敏感词汇的内容,再在动态代理中,对getParameter(),getParameterMap(),

getParameterValues()三种方法做不同增强。

package Filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.awt.*;
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;
import java.util.Map;
import java.util.Set;@WebFilter("/*")
public class SenstiveWordsFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {//创建request的代理对象,增强getParameter方法,getParameterMap方法,getParameterValues方法ServletRequest proxy_req = (ServletRequest) Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(), servletRequest.getClass().getInterfaces(), new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {//判断是否是getParameter方法if(method.getName().equals("getParameter")){//增强返回值//1,获取返回值String value = (String) method.invoke(servletRequest, args);//判断返回值中是否为空if(value!=null){//判断value中是否有敏感词汇for (String str:list) {if(value.contains(str)){//如果有敏感词汇,将敏感词汇修改成***value=value.replaceAll(str,"***");}}}return value;}//判断是否是getParameterMap方法else if(method.getName().equals("getParameterMap")){//增强返回值//1,获取返回值Map<String,String[]> map= (Map<String,String[]>) method.invoke(servletRequest, args);//遍历map集合,将其中的敏感词汇替换Set<String> set =map.keySet();for (String key:set) {for (String value:map.get(key)) {int i=0;if(value!=null){//判断value中是否有敏感词汇for (String str:list) {if(value.contains(str)){//如果有敏感词汇,将敏感词汇修改成***map.get(key)[i]=value.replaceAll(str,"***");i++;}}}}}return map;}//判断是否是getParameterValues方法else if(method.getName().equals("getParameterValues")){//增强返回值//1,获取返回值String[] values=(String[]) method.invoke(servletRequest,args);//2,遍历values数组,替换敏感词汇for (int i=0;i<values.length;i++){if(values[i]!=null){//判断value中是否有敏感词汇for (String str:list) {if(values[i].contains(str)){//如果有敏感词汇,将敏感词汇修改成***values[i]=values[i].replaceAll(str,"***");}}}}return values;}return method.invoke(servletRequest,args);}});filterChain.doFilter(proxy_req,servletResponse);}//敏感词汇集合private List<String> list=new ArrayList<String>();@Overridepublic void init(FilterConfig filterConfig) throws ServletException {try {//1,获取文件真实路径ServletContext servletContext = filterConfig.getServletContext();String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");//2,读取文件//使用BufferdReader字符输入流BufferedReader br=new BufferedReader(new FileReader(realPath));//3,将文件中的每一行数据加载到list中String line=null;while ((line=br.readLine())!=null){list.add(line);}//4,关闭流br.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}@Overridepublic void destroy() {}
}

JavaWeb 敏感词汇过滤器相关推荐

  1. 敏感词汇过滤器(过滤器技术)

    ​​​ 目录 系列文章目录 文章目录 前言 一.过滤器是什么? 二.使用步骤 1.引入库 2.具体代码示例 总结 前言 使用过滤器技术和文件读入技术 一.过滤器是什么? web中的过滤器和平时生活中的 ...

  2. python项目实战:实现游戏敏感词汇过滤器

    2019独角兽企业重金招聘Python工程师标准>>> 前言 某者荣耀的火爆程度,我就不用多说了,但是呢,其中总有那么一些没有素质的人,各种骂人的话都有,毕竟林子大了什么人都有,但是 ...

  3. python项目实战:实现王者荣耀敏感词汇过滤器

    2019独角兽企业重金招聘Python工程师标准>>> 前言 王者荣耀的火爆程度,我就不用多说了,但是呢,其中总有那么一些没有素质的人,各种骂人的话都有,毕竟林子大了什么人都有,但是 ...

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

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

  5. 过滤器-过滤敏感词汇

    首先要准备好敏感词库,敏感词汇的格式如下: |1 买枪|2 四大舰队|3 其中1代表禁用词:禁用词将禁止提交,2代表审核次:将以高亮字体显示,3代表过滤词:将替换为****, 过滤器代码实现如下: p ...

  6. Struts2编写自定义验证拦截敏感词汇(十二)

    勿以恶小而为之,勿以善小而不为--------------------------刘备 劝诸君,多行善事积福报,莫作恶 上一章简单介绍了Struts2利用验证框架实现数据验证(十一),如果没有看过,请 ...

  7. 【前缀树】写一个敏感词过滤器

    1.什么是敏感词过滤 这其实是一个很常见的功能,随处可见以至于你可能都没关注过,基本上在有评论的地方都会有它的身影. 举例来说,你打游戏和别人对喷的时候,是不是一些脏话发不出去哈哈,这些词汇会用*** ...

  8. 用js模拟一个简单敏感词过滤器

    1.用js模拟一个简单敏感词过滤器 (用户输入的内容中的敏感词替换为*) 例:"今天有个傻子在旁边大喊大叫,影响了我的操作.", 过滤后:"今天有个在旁边大喊大叫,影响了 ...

  9. 用java写敏感词过滤器的代码

    用java写敏感词过滤器的代码 这里采用动态代理,所以要创建proxy代理对象,利用代理,来增强某些方法(getParameter方法.getParameterMap方法.getParameterVa ...

  10. 用前缀树实现中文敏感词过滤器

    文章目录 前言 运行环境 过滤器源码 过滤器测试类 前言 本文代码实现一个中文的敏感词过滤器,预先将准备好的敏感词写入前缀树数据结构中实现快速检索,并且节省内存.一般用于检查注册用户名称.言论是否包含 ...

最新文章

  1. python pytest allure_python-pytest-Allure2测试报告生成
  2. FCS编程之连接示例
  3. HTTP1.0、HTTP1.1 、SPDY、HTTP2.0之演变过程和优化
  4. mysql 5.7 内存占用_MySQL 5.7 内存使用计算
  5. Vim-latex 插件 的安装
  6. HCL V2.1.1如何修改CLI字体大小及背景颜色
  7. 详解研发健康体检信息管理系统分析
  8. 一文详解经纬度坐标与平面坐标转换
  9. 数字共享平台赋能船舶行业数字化转型——CSBC,搭建行业数字生态链
  10. autoit mysql update_RobotFramework+selenium+requests+autoit+mysql+appium 环境搭建
  11. Druid配置——Ingestion Spec(摄取规范)
  12. 【MAVEN】maven仓库搜索功能
  13. 走进VOT--《High Performance Visual Tracking with Siamese Region Proposal Network》阅读翻译
  14. html名人名言页面,HTML5 纪念卡 | 名人名言卡
  15. 客户机加入域环境的前提条件
  16. 04_frp内网穿透实例
  17. 《自动驾驶行业交流(微信)群》及公约
  18. Android获取WifiMac地址
  19. Java求出水仙花数
  20. patchwall 与鸿蒙对比,官方解读小米电视PatchWall智能电视系统设计的那些事儿

热门文章

  1. 设计一个递归算法释放二叉树bt中的所有结点(二叉树采用二叉链表存储结构)
  2. 在虚拟机中安装Linux系统
  3. json多层集合转对象
  4. 高通工具QXDM、QCAT和QPST
  5. hpy计算机维护系统,HPY计算机维护PE系统启动U盘\UD版\网启版制作图文教程
  6. Qt SQL 学习笔记二:qt建立数据库,创建和操纵表
  7. 基坑监测日报模板_基坑水平监测日报表
  8. docker如何配置阿里云加速器
  9. java中常见的设计模式_在Java中10种常见设计模式详细介绍
  10. Charles青花瓷抓包