Filter敏感词汇过滤,把文件的每一句加到集合

Java Filter——敏感词汇过滤 Filter的简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。 它主要用于对用户请求进行预处理,也可以对HttpServlet... 阅读详情

案例2_敏感词汇过滤

  • 需求:
  1. 对day17_case(这里是https://blog.youkuaiyun.com/QLBFA/article/details/110428015)这个项目资源。案例录入的数据进行敏感词汇过滤
  2. 敏感词汇参考《敏感词汇.txt》
  3. 如果是敏感词汇,替换为 ***
  • 分析:
  1. 对request对象进行增强。增强获取参数相关方法
  2. 放行。传递代理对象
    在这里插入图片描述
    见:设计模式之代理模式
  • 增强对象的功能:
  • 设计模式:一些通用的解决固定问题的方式
  1. 装饰模式
  2. 代理模式
  • 概念:
  1. 真实对象:被代理的对象
  2. 代理对象:
  3. 代理模式:代理对象代理真实对象,达到增强真实对象功能的目的
  • 实现方式:
  1. 静态代理:有一个类文件描述代理模式
  2. 动态代理:在内存中形成代理类
  • 实现步骤:
  1. 代理对象和真实对象实现相同的接口
  2. 代理对象 = Proxy.newProxyInstance();
  3. 使用代理对象调用方法。
  4. 增强方法
  • 增强方式:
  1. 增强参数列表
  2. 增强返回值类型
  3. 增强方法体执行逻辑

在https://blog.youkuaiyun.com/QLBFA/article/details/110428015的基础上
在src建一个filter子包,把敏感词汇.txt直接放到src下建一个SensitiveWordsFilter的Filter:

package cn.itcast.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;

/**
 * @author QLBF
 * @version 1.0
 * @date 2020/12/2 22:44
 */
/**
 * 敏感词汇过滤器
 */
@WebFilter("/*")
public class SensitiveWordsFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        //1.创建代理对象,增强getParameter方法
        ServletRequest proxy_req =(ServletRequest) Proxy.newProxyInstance(req.getClass().getClassLoader(), req.getClass().getInterfaces(), new InvocationHandler() {
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //增强getParameter方法
                //判断是否是getParameter方法
                if (method.getName().equals("getParameter")) {
                    //增强返回值
                    //获取返回值,转为String,不然Object无法调用子类、String的方法
                    String value = (String) method.invoke(req, args);
                    if (value != null) {
                        for (String str : list) {
                            if (value.contains(str)) {
                                value = value.replaceAll(str, "****");
                            }
                        }
                    }
                    return value;
                }
                //判断方法名是否是 getParameterMap

                //判断方法名是否是 getParameterValue

                //若上面匹配不到就执行这条
                return method.invoke(req, args);
            }
        });

        //2.放行
        chain.doFilter(proxy_req, resp);
    }

    private List<String>list=new ArrayList<>();//敏感词汇集合

    public void init(FilterConfig config) throws ServletException {
        try{
            //1.获取文件真实路径,不懂看之前的博客
            ServletContext servletContext = config.getServletContext();
            String realPath = servletContext.getRealPath("/WEB-INF/classes/敏感词汇.txt");
            //2.读取文件
            BufferedReader br=new BufferedReader(new FileReader(realPath));
            //3.将文件的每一行数据添加到list中
            String line=null;
            while ((line=br.readLine())!=null){
                list.add(line);
            }
            br.close();

            System.out.println(list);


        }catch (Exception e){
            e.printStackTrace();
        }

    }

}

在servlet包建一个测试Servlet:

package cn.itcast.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;

/**
 * @author QLBF
 * @version 1.0
 * @date 2020/12/2 23:02
 */
@WebServlet("/testServlet ")
public class TestServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        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);
    }
}

在这里插入图片描述

测试:
访问testServlet:
http://localhost:8080/bbb/testServlet?name=张三&你个傻瓜啊,是个大坏蛋

在控制台会输出:张三****:null,成功过滤敏感词汇

如何通过Filter过滤敏感词汇 1.Filter过滤器 概念: 当访问服务器资源的时候,Filter(过滤器)就可以将请求拦截下来完成一些如:登录验证、过滤敏感字符等t特殊的功能。 实现步骤: 1.定义一个类,实现接口Filter 2.复写方法 3.配置拦截路径 1.web.xml 2.注解 代码注解: 1.首先我们创建一个类实现Filter接口,并打上注解@WebFilter("/*")以过滤所有... 阅读详情

相关推荐

Filter实现敏感词汇过滤

太晚了,就不文字说明了直接贴代码,注意增强的是相关方法与参数 package cn.itcast.web.filter; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import java.io.BufferedReader; import java.io.FileReader; import java.i...

qq_33351986的博客 456

javaEE学习笔记—————利用代理模式和过滤器增强对象功能完成敏感词汇过滤功能

在日常的生活中大家也知道存在很多侮辱性的词汇,LOL大家很多小伙伴都玩过吧,经常会看见你**你个**这样字幕,那么是怎么实现的呢,下面我们就完成这样一个类似的功能!

Belief的博客 359

Go-golang敏感词过滤

golang 敏感词过滤

Filter-Listener

Filter:过滤器 web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。 过滤器的作用:一般用于完成通过的操作。如:登录验证、统一编码处理、敏感字符的过滤 快速入门 1.步骤 1.定义一个类,实现接口Filter 2.复写方法 3.配置拦截路径 ...

Able033的博客 256

Go-go-wordsfilter是一个高性能的Go敏感词过滤器

go-wordsfilter 是一个高性能的 Go 敏感词过滤器,通过预先读取敏感词源并构建树状结构数据的方式来高效地检测和替换敏感词

Go-基于go语言和开源的包封装的一个敏感词过滤服务

基于go语言和开源的包封装的一个敏感词过滤服务,可微服务独立部署,提供api给业务使用,占用内存少,搜索匹配快

Java中的过滤器与监听器

目录1、过滤器2、监听器 1、过滤器 Java EE WEB 提供了一套标准, 可以对web请求增加过滤功能,可以在不改变Servlet代码情况下,Servlet扩展功能。 用途:利用Filter可以实现如:权限检查、编码过滤、请求日志等功能 编写Filter public class HelloFilter implements Filter { public void init(FilterConfig filterConfig) throws ServletException { /

weixin_55715292的博客 735

敏感词过滤器(富含3000词汇)

敏感词过滤器(富含3000词汇)绝对值 仅供学习参考

Java - 过滤器有哪些作用和用法?

分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请点击http://www.captainbed.net Java Web开发中的过滤器(filter)是从Servlet 2.3规范开始增加的功能,并在Servlet 2.4规范中得到增强。对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和服务器之间的请求与响应信息,并对这些信...

了解➔熟悉➔掌握➔精通 4万+

Go-一个简单的golang布隆过滤器

一个简单的golang布隆过滤器

无人机蜂群作战设计技术详解

构建防御网络,拦截敌方无人机或导弹;无人机蜂群作战设计技术是一种创新的军事应用概念,它基于生物仿生学原理,通过先进的通信技术、自主导航与决策算法,将大量小型、低成本、功能各异的无人机组织成一个高度协同的群体,以执行复杂多样的军事任务。无人机蜂群作战的概念源于自然界中蜜蜂、蚂蚁等生物群体的行为模式,这些生物群体通过简单的个体间的信息交互和分工协作,能够完成远远超出单一个体能力的复杂任务。其中,无人机群体是执行任务的主体,指挥控制系统负责任务分配和决策,通信数据链则保障无人机群体与指挥控制系统之间的信息交换。

专注多旋翼、复合翼无人机技术研究,从事低空经济行业。 2217

java中的过滤器

1.过滤器的概念和作用 1.概念: 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求; 在请求到达Servlet/JSP之前,过滤器截获请求; 2.作用:在客户端的请求访问后端资源之前,拦截这些请求(添加处理)。 2.过滤器相关的API 1.Servlet API(javaEE)中,与过滤器有关的API共有三个接口,分别是: Filter; FilterChain; FilterConfig。 3.Filter接口 1.Filter接口是过滤器类必须实现的接口,该接

qq_64891979的博客 2万+

从共现矩阵到共现图一步到位——详解版

1.共现矩阵 判断大量不同文本之间,相邻词的联系,两词在所有文本中相邻的次数在矩阵中用数值表示。(参考此) 例子如下: 1.1 文本 • I like deep learning. • I like NLP. • I enjoy flying. 1.2 共现矩阵 2.共现图 2.1 数据预处理(节点和边) 获取文件node.csv和edge.csv。代码详见github仓库 2.2 共现图的制作 2.2.1 gephi的安装(参考此) (1)先下载gephi (2) 再配置java环境(下载java1.8

微乐的博客 4403

Filter过滤敏感词汇

个人博客 过滤敏感词汇的实现,需要对 request 对象进行增强,增强获取参数的相关方法,然后替换敏感词汇为***。使用代理模式实现 过滤器的编写 @WebFilter("/*") public class SensitiveFilter implements Filter { public void doFilter(ServletRequest req, ServletRespon...

William_GJIN的博客 4486

VulnHub靶机渗透实战(详细思路讲解)

使用kali中的namp工具扫描开放端口,这时kali会用一个端口号向目标主机的65535个端口发送TCP连接建立请求,回应了ack=1,syn=q的端口就是开放端口号,这里可以看到21,22,80,3306号端口是开放的。可以看到这里得到了很多哈希,带*号的是禁用的或者是空密码,将三个不带星号的密码复制下来,创建一个shell.txt文档,将三个密码复制进去。这里看到我们是没有成功进入这个网页的,应该是目录的问题,我们将目录修改一下,但是没有显示出来,可能是编码问题,再回到我们找到的源码。

weixin_65891791的博客 2547

systrace分析 之 问题初步定位

如下surfaceflinger空缺点,上面对应的bufferTX 中有buffer,但VSYNC-SF 过来后,SurfaceFlinger却没有去取,检查测试app “android.settings”, 也没有GPU completion 时间长的问题,所以该部分可以请SurfaceFlinger的owner 进一步确认为何不取buffer。. GPU拿的是acquireFence HWC拿的是releaseFence, GPU是绘图,HWC是合成显示,这两个是互相等待的关系,

yangzex的专栏 3197

Filter动态代理敏感词汇过滤

Filter敏感词汇过滤 对request对象的getParamater()、getParameterMap()和getParameterValues()这三个方法进行增强,产生一个新的request对象 放行,传递代理对象,将新request对象传入 动态代理增强对象的功能 设计模式:通用的解决固定问题的方式 1. 装饰模式 2. 代理模式 【概念】 真实对象:被代理的对象 代理对...

iqqcode 1082

用MATLAB从零实现六足机器人步态仿真:交替三角与波动步态保姆级教程

本文详细介绍了如何使用MATLAB从零实现六足机器人的两种经典步态仿真:交替三角支撑步态和波动步态。通过参数定义、相位设置、运动轨迹生成和三维可视化等步骤,帮助读者掌握六足机器人步态规划的核心技术。教程包含完整代码和详细解析,适合机器人爱好者和相关专业学生学习实践。

weixin_26765363的博客 229

用动态代理实现Filter过滤敏感词汇的功能

              (在服务器里边有很多地方都需要用户去录入数据,那么也就是说,这多个地方我们都需要对他们进行敏感词汇的过滤,那么这多个地方都需要进行过滤,那就意味着我们可能需要做一些通用的过滤方式,那么我们可以加一个过滤器,有这个过滤器之后,将来请...

Monster丶ZF的博客 3934

创建XCP的CanApe工程

创建XCP的CanApe工程

weixin_44173919的博客 2891

【虚幻引擎UE】UE5 仅需6步轻松实现关卡顺滑切换

【虚幻引擎UE】UE5 仅需6步轻松实现关卡切换

灵境引路人 2万+

Filter过滤器|敏感词汇过滤

文章目录一、需求及分析二、过滤器三、xml配置四、测试sevlet 一、需求及分析 (1)对录入的数据进行敏感词汇过滤。 (2)敏感词汇参考 敏感词汇.txt文档 (3)如果是敏感词汇,替换为"***"。 分析:使用代理模式对request对象进行增强,增强获取参数相关方法(getParameter等)。然后放行,传递代理对象。以getParameter为例,getParameterMap,...

匿名攻城狮 3962

17、Nimble 包开发与并行编程指南

本文介绍了Nimble包的开发与版本管理流程,涵盖语义化版本控制规范及发布步骤;深入探讨了Nim中的并行编程基础,包括并发与并行的区别、threads模块与threadpool模块的使用方法及其差异;分析了线程执行的不确定性、线程池的优势,并提供了线程同步和资源管理的实践示例,帮助开发者高效构建稳定、高性能的Nim应用程序。

wine的专栏 56

Filter -- 过滤敏感词汇

例:将 “坏蛋” “笨蛋”,变为“***”。 1、敏感词汇 // words.txt 坏蛋 笨蛋 2、首先创建filter public class FilterDemo implements Filter { @Override public void destroy() { } @Override public void doFilter(ServletR...

七分好月 1064

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

Java Filter实现对敏感词的过滤

一、需求:敏感词汇 过滤 二、技术点:过滤器(Filter),代理增强(Proxy) 三、代码: 1、测试工程目录 2、src下创建敏感词文件 敏感词.txt 3、新建敏感词过滤器 SensitiveWordsFilter.java package com.mollen.filter; package com.mollen.filter.filter; import javax.servle...

zhang150114的博客 2860

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

上一篇: Filter登录验证(权限控制)小案例
下一篇: 设计模式之代理模式
Mike-H
博客等级 码龄8年 27粉丝 141原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值