0
点赞
收藏
分享

微信扫一扫

Java过滤器实现敏感词过滤

一、前言

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

二、实现原理

在用户输入的文本中查找并替换敏感词汇。为了实现这一点,我们将创建一个 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过滤器实现敏感词过滤_java_04

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

四、总结

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


举报

相关推荐

0 条评论