Filter的敏感词汇过滤案例
需求:
1. 对day17_case案例录入的数据进行敏感词汇过滤
2. 敏感词汇参考《敏感词汇.txt》
3. 如果是敏感词汇,替换为 ***
分析:1.对request对象进行增强(动态代理),增强获取参数相关方法2.放行,传递代理对象
SensitiveWordsFilter:
package cn.itcast.web.filter;import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
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 SensitiveWordsFilter implements Filter {// 敏感词汇集合private List<String> list = new ArrayList<String>();@Overridepublic void init(FilterConfig filterConfig) throws ServletException {BufferedReader br = null;try {// 1.加载文件真实路径ServletContext servletContext = filterConfig.getServletContext();// 获取src下的敏感词汇// 该处realPath可以使用getResourcesAsStream获取String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");// 2.读取文件br = new BufferedReader(new FileReader(realPath));// 3.将文件的每一行数据添加到list中String line = null;while ((line = br.readLine()) != null) {list.add(line);}} catch (Exception e) {e.printStackTrace();} finally {if (br != null) {try {br.close();} catch (IOException e) {e.printStackTrace();}}}System.out.println(list);}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {// 1.创建代理对象,ServletRequest proxy_request = (ServletRequest) Proxy.newProxyInstance(servletRequest.getClass().getClassLoader(),servletRequest.getClass().getInterfaces(),new InvocationHandler() {@Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {// 增强getParameter方法// 判断是否是getParameter方法if ("getParameter".equals(method.getName())) {// 使用真实对象request,获取前端请求中返回的参数并增强该参数String value = (String) method.invoke(servletRequest, args);if (value != null) {// 遍历文件配置文件中获取的敏感词汇for (String str : list) {if (value.contains(str)) {value = value.replaceAll(str, "***");}}}// 返回增强后的返回值为替换了敏感词汇的返回值return value;}// 判断方法是否是getParameterMap// 需要实现// 判断方法是否是getParameterValue// 需要实现// getParameter方法以外的方法正常执行return method.invoke(servletRequest, args);}});// 2.放行filterChain.doFilter(proxy_request, servletResponse);}@Overridepublic void destroy() {}
}
TestServlet:
package cn.itcast.web.servlet;import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;@WebServlet("/testServlet")
public class TestServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// 从前台输入tomcat中设定好的url以及name参数和msg参数// msg的值或name的值可以使用配置文件中的敏感词汇String name = request.getParameter("name");String msg = request.getParameter("msg");// 敏感词汇将替换成 张三:你个***你个大***System.out.println(name+":"+msg);}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);}
}
敏感词汇.txt 该文件在src下
笨蛋
坏蛋
其他敏感词汇可以自行添加
Filter的敏感词汇过滤案例相关推荐
- 敏感词过滤案例(Filter过滤器)
敏感词汇过滤 需求 对UserCRUD_case案例中录入的数据进行敏感词汇的过滤 敏感词汇参考<敏感词汇.txt> 若是敏感词汇,则替换为*** 分析 在进行过滤前后,所获取的reque ...
- 动态代理的分析以及利用动态代理模式进行敏感词汇过滤
动态代理 增强对象的功能: 设计模式:一些通用的解决固定问题的方式 代理模式 概念: (1). 真实对象:被代理的对象 (2). 代理对象: (3). 代理模式:代理对象代理真实对象,达到增强真实对象 ...
- Java基于Socket实现聊天、群聊、敏感词汇过滤功能
首先的话,这个代码主要是我很久以前写的,然后当时还有很多地方没有理解,现在再来看看这份代码,实在是觉得丑陋不堪,想改,但是是真的改都不好改了- 所以,写代码,规范真的很重要. 实现的功能: 用户私聊 ...
- 优秀博客 --敏感词汇过滤
2019独角兽企业重金招聘Python工程师标准>>> 敏感词汇过滤 http://www.cnblogs.com/chenssy/p/3751221.html#2966041 树上 ...
- 【敏感词汇过滤算法】基于DFA-前缀树的敏感词汇过滤算法(项目实用)
在敏感词汇过滤这块,不同的算法所造成的性能差异是非常大的,选择一个合适的算法非常重要.因为以前做算法的时候做过类似前缀树的字符串匹配之类的算法,所以一开始就打算用前缀树做的,后面了解了一下DFA的相关 ...
- PHP敏感词汇过滤SDK(树形结构遍历命中违禁词)
先介绍一下匹配敏感词原理吧,因为没有工具,画的很糙,有疑问直接联系我.(绿色箭头代表命中敏感词,灰色:未命中) base 确定有穷自动机(DFA)算法 比如说"可以"是敏感词,那么 ...
- Filter - 通过拦截器与动态代理实现敏感词汇过滤
需求:将敏感词汇.txt文件中的词语过滤为 -> "***" 分析: 首先加载文档,将文档中的词汇纳入集合中备用,方便后期比对使用. 使用Proxy动态代理将request对 ...
- 敏感词汇过滤(不区分大小写)
最近项目中,用户评论内容需要屏蔽敏感词汇,从网上总结以下方法,(不区分大小写,如想设置大小写敏感,可以把代码中content..toLowerCase()去掉).具体看代码: 1.读取敏感词汇文档 & ...
- Python敏感词汇判断案例分析
1.没有返回值的方法就不能直接赋值或输出,直接调用方法然后输出,一般有参数的有返回值,无参数的没有返回值,函数有返回值,方法无返回值. 外层用for--in循环敏感词汇,内层判断输入内容是否存在敏感词 ...
- C#敏感词汇过滤(不是正则)
System.Text.StringBuilder sb = new System.Text.StringBuilder(text.Length); string filterText = &qu ...
最新文章
- 人工智能图像到图像转换图像分割任务中语义一致的图像到图像转换
- 【小松教你手游开发】【unity实用技能】unity游戏移植到WindowsPhone8平台上的一些...
- 2.6 处理数据不匹配问题-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
- python pyside简单布局_python – pyside显示/隐藏布局
- 文巾解题 136. 只出现一次的数字
- ner 评估指标_序列标注算法评估模块 seqeval 的使用
- [css] 列举CSS优化、提高性能的方法
- Spring和SpringMVC总结篇
- 在pycharm/IDEA里编辑latex:TeXiFy-IDEA/Pycharm
- 如何使用LDAP用户单点登录到Horizon桌面和应用
- 金融数据分析之公司年报会计师事务所信息批量提取
- PC端输入法双拼皮肤分享
- 字体编码—Unicode16进制编码转字符
- DelayQueue 阻塞队列
- mysql求平方根_MySQL数据库中如何求一个数的二次平方根(SQRT函数)呢?
- 适配iPhone XR/iPhone XS Max
- Typescript基础知识--学习笔记
- java 龟兔赛跑_Java实现多线程模拟龟兔赛跑
- opencv 数学形态学(2) 膨胀运算:dilate
- 剑心---速度与位置
热门文章
- linux小米随身wifi,小米随身wifi for mac版详细使用图文步骤
- java规则引擎_Drools规则引擎(Java)
- drools规则引擎初探
- win7装xp双系统_9102年还用XP是怎样的体验?告诉你XP凉得有多透
- Acme CAD Converter 2019简体中文直装破解版
- 数学建模预测模型实例(二)---表白墙影响力量化模型
- 10款好用的程序员软件推荐
- 基于NSGA3的swat模型情景的多目标优化算法,python
- ktv服务器管理系统,小型KTV综合解决方案
- python输出生日程序_python生日算法