JavaWeb 敏感词汇过滤器
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.引入库 2.具体代码示例 总结 前言 使用过滤器技术和文件读入技术 一.过滤器是什么? web中的过滤器和平时生活中的 ...
- python项目实战:实现游戏敏感词汇过滤器
2019独角兽企业重金招聘Python工程师标准>>> 前言 某者荣耀的火爆程度,我就不用多说了,但是呢,其中总有那么一些没有素质的人,各种骂人的话都有,毕竟林子大了什么人都有,但是 ...
- python项目实战:实现王者荣耀敏感词汇过滤器
2019独角兽企业重金招聘Python工程师标准>>> 前言 王者荣耀的火爆程度,我就不用多说了,但是呢,其中总有那么一些没有素质的人,各种骂人的话都有,毕竟林子大了什么人都有,但是 ...
- 动态代理的分析以及利用动态代理模式进行敏感词汇过滤
动态代理 增强对象的功能: 设计模式:一些通用的解决固定问题的方式 代理模式 概念: (1). 真实对象:被代理的对象 (2). 代理对象: (3). 代理模式:代理对象代理真实对象,达到增强真实对象 ...
- 过滤器-过滤敏感词汇
首先要准备好敏感词库,敏感词汇的格式如下: |1 买枪|2 四大舰队|3 其中1代表禁用词:禁用词将禁止提交,2代表审核次:将以高亮字体显示,3代表过滤词:将替换为****, 过滤器代码实现如下: p ...
- Struts2编写自定义验证拦截敏感词汇(十二)
勿以恶小而为之,勿以善小而不为--------------------------刘备 劝诸君,多行善事积福报,莫作恶 上一章简单介绍了Struts2利用验证框架实现数据验证(十一),如果没有看过,请 ...
- 【前缀树】写一个敏感词过滤器
1.什么是敏感词过滤 这其实是一个很常见的功能,随处可见以至于你可能都没关注过,基本上在有评论的地方都会有它的身影. 举例来说,你打游戏和别人对喷的时候,是不是一些脏话发不出去哈哈,这些词汇会用*** ...
- 用js模拟一个简单敏感词过滤器
1.用js模拟一个简单敏感词过滤器 (用户输入的内容中的敏感词替换为*) 例:"今天有个傻子在旁边大喊大叫,影响了我的操作.", 过滤后:"今天有个在旁边大喊大叫,影响了 ...
- 用java写敏感词过滤器的代码
用java写敏感词过滤器的代码 这里采用动态代理,所以要创建proxy代理对象,利用代理,来增强某些方法(getParameter方法.getParameterMap方法.getParameterVa ...
- 用前缀树实现中文敏感词过滤器
文章目录 前言 运行环境 过滤器源码 过滤器测试类 前言 本文代码实现一个中文的敏感词过滤器,预先将准备好的敏感词写入前缀树数据结构中实现快速检索,并且节省内存.一般用于检查注册用户名称.言论是否包含 ...
最新文章
- python pytest allure_python-pytest-Allure2测试报告生成
- FCS编程之连接示例
- HTTP1.0、HTTP1.1 、SPDY、HTTP2.0之演变过程和优化
- mysql 5.7 内存占用_MySQL 5.7 内存使用计算
- Vim-latex 插件 的安装
- HCL V2.1.1如何修改CLI字体大小及背景颜色
- 详解研发健康体检信息管理系统分析
- 一文详解经纬度坐标与平面坐标转换
- 数字共享平台赋能船舶行业数字化转型——CSBC,搭建行业数字生态链
- autoit mysql update_RobotFramework+selenium+requests+autoit+mysql+appium 环境搭建
- Druid配置——Ingestion Spec(摄取规范)
- 【MAVEN】maven仓库搜索功能
- 走进VOT--《High Performance Visual Tracking with Siamese Region Proposal Network》阅读翻译
- html名人名言页面,HTML5 纪念卡 | 名人名言卡
- 客户机加入域环境的前提条件
- 04_frp内网穿透实例
- 《自动驾驶行业交流(微信)群》及公约
- Android获取WifiMac地址
- Java求出水仙花数
- patchwall 与鸿蒙对比,官方解读小米电视PatchWall智能电视系统设计的那些事儿