首页 > 编程语言 >Java过滤器实现敏感词过滤

Java过滤器实现敏感词过滤

时间:2024-02-07 15:32:42浏览次数:32  
标签:Java String springframework 敏感 过滤 过滤器 import data public

一、前言

在我们日常开发中经常会遇到前端输入数据保存到数据库的需求,比如留言板、回复等。我们需要规范输入内容就需要防范敏感词汇,这涉及到维护良好的用户体验、遵守法规以及保护用户免受侮辱和威胁。通过实施敏感词汇过滤,我们可以降低不适当内容的传播风险,提高平台的信誉度。

二、实现原理

在用户输入的文本中查找并替换敏感词汇。为了实现这一点,我们将创建一个 Java 过滤器,该过滤器在请求到达 Servlet 之前拦截并检查用户输入的文本。如果发现任何敏感词汇,它将进行替换或拒绝请求。

三、代码实现

1.创建过滤器

package com.example.aopdemo.filter;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;

/**
 * @author qx
 * @date 2024/2/7
 * @des 内容过滤器
 */
@javax.servlet.annotation.WebFilter("/postData")
public class WebFilter implements Filter {

    private static final String[] WORDS = {"敏感词1", "敏感词2", "敏感词3"};

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        String data = servletRequest.getParameter("data");
        for (String word : WORDS) {
            if (data.contains(word)) {
                // 替换敏感词汇为*
                data = data.replaceAll(word, "*");
            }
        }
        // 将处理后的文本传递给下一个过滤器或 Servlet
        filterChain.doFilter(new WordFilteredRequest((HttpServletRequest) servletRequest, data), servletResponse);
    }

}

启动类加上@ServletComponentScan注解

package com.example.aopdemo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;

@SpringBootApplication
@ServletComponentScan
public class AopDemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(AopDemoApplication.class, args);
    }

}

2.创建处理过滤后的请求

package com.example.aopdemo.filter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
 * @author qx
 * @date 2024/2/7
 * @des 处理过滤后的请求
 */
public class WordFilteredRequest extends HttpServletRequestWrapper {

    private final String filteredContent;

    public WordFilteredRequest(HttpServletRequest request,String filteredContent) {
        super(request);
        this.filteredContent = filteredContent;
    }

    @Override
    public String getParameter(String name) {
        // 返回过滤后的文本
        return "data".equals(name) ? filteredContent : super.getParameter(name);
    }
}

3.创建控制层

package com.example.aopdemo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpServletRequest;

/**
 * @author qx
 * @date 2024/2/7
 * @des 测试
 */
@Controller
public class IndexController {

    @GetMapping("/demo")
    public String toIndex() {
        return "index";
    }

    @PostMapping("/postData")
    @ResponseBody
    public String operateData(String data, HttpServletRequest request) {
        return "您输入的数据为:" + request.getParameter("data");
    }


}

4.创建测试页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form method="post" action="/postData">
    内容:<input type="text" name="data"/><br/><br/>
    <input type="submit" value="提交"/>
</form>
</body>
</html>

5.启动程序,测试

Java过滤器实现敏感词过滤_过滤器

输入正常数据的情况:

Java过滤器实现敏感词过滤_java_02


Java过滤器实现敏感词过滤_过滤器_03

输入敏感词的情况:

Java过滤器实现敏感词过滤_过滤器_04

Java过滤器实现敏感词过滤_java_05

四、总结

通过使用 Java 过滤器,我们可以轻松地实现敏感词汇过滤的功能,以保护用户免受不良内容的侵害。在实际项目中,你可能需要根据具体情况调整和优化这个简单的实现,例如支持更复杂的敏感词汇匹配、提供用户反馈等功能。不管怎样,敏感词汇过滤是构建一个更加安全和健壮的 Web 应用程序的重要一步。


标签:Java,String,springframework,敏感,过滤,过滤器,import,data,public
From: https://blog.51cto.com/u_13312531/9638446

相关文章

  • Java与sql中的字符串表示
    在Java中,双引号""用于表示字符串字面量,而单引号''用于表示字符字面量。这意味着在Java中,您可以使用双引号来包围包含任意数量字符的字符串,包括零个字符(空字符串)和多个字符。例如,在Java中:StringemptyString="";//空字符串StringsingleChar='a';/......
  • Java获取方法的调用者
    publicstaticvoidmain(String[]args){method1();}staticvoidmethod1(){method2();}staticvoidmethod2(){method3();}staticvoidmethod3(){printCallingInfo();}staticvoidp......
  • Java学习的知识笔记
    不会改变原始对象的方法reverse函数,作用:排序使用小技巧判断string是否相等可以使用equals来进行判断。判断string是否是空字符串可以用isBlank()进行判断对于超大的整数加减使用对应的函数进行操作,比如加,使用add函数参考bignum.java因为math类的构造方法是private修饰,所以......
  • 盘点Java集合(容器)概览,Collection和Map在开发中谁用的最多?
    写在开头在Java的世界里万物皆对象。但我认为是万物皆数据,世界由各种各样数据构建起来,我们通过程序去实现数据的增删改查、转入转出、加减乘除等等,不同语言的实现方式殊途同归。由此可见,数据对于程序语言的重要性。这段话是在写数据类型那篇博客时说的,当时是为了引入Java中数据......
  • JUnit实践教程——Java的单元测试框架
    前言大家好,我是chowley,最近在学单元测试框架——JUnit,写个博客记录一下!在软件开发中,单元测试是确保代码质量和稳定性的重要手段之一。JUnit作为Java领域最流行的单元测试框架,为开发人员提供了简单、灵活和强大的测试工具。JUnit1.简介JUnit是一个开源的Java单元测试框架,最初由......
  • python怎么调用支持java的接口
    在Python编程中,有时候需要调用支持Java的接口,以实现与Java程序的交互和功能扩展。本文将介绍如何在Python中调用支持Java的接口,以实现跨语言的开发和集成。一、背景知识在Python中,我们可以使用JPype库来实现Python与Java之间的交互。JPype是一个Python模块,提供了Python与Java之间的......
  • JavaScript 的实际应用
    1. WebWizardry:从表单验证到交互。地图、JavaScript使网页变得栩栩如生,将静态内容转变为动态体验。2. MobileMagic:得益于ReactNative和Ionic等框架,JavaScript不再仅仅局限于浏览器。它正在向移动应用程序开发领域展开翅膀,将其魔力带入iOS和Android。3.游戏开始:?借......
  • 【Java核心基础】揭秘Iterable接口和Iterator接口的核心区别!
    在Java中,Iterable接口和Iterator接口都用于遍历集合(Collection)中的元素,但它们的使用方式和功能有所不同。官方文档传送门:https://docx.iamqiang.com/jdk11/api/java.base/java/lang/Iterable.htmlhttps://docx.iamqiang.com/jdk11/api/java.base/java/util/Iterator.html核心......
  • Mybatis Plus java.lang.NoSuchMethodError: com.baomidou.mybatisplus.core.toolkit.
    问题描述在进行SpringBoot整合MybatisPlus时提示10:49:08.390[restartedMain]DEBUGorg.springframework.boot.context.logging.ClasspathLoggingApplicationListener-Applicationfailedtostartwithclasspath:[file:/D:/%e7%99%be%e5%ba%a6%e7%bd%91%e7%9b%98/Vue......
  • Java新建一个子线程异步运行方法
    如何在运行主方法的同时异步运行另一个方法,我是用来更新缓存;1.工具类publicclassThreadPoolUtils{privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(ThreadPoolUtils.class);privatestaticfinalStringPOOL_NAME="thread-im-runner";//......