美文网首页
28 在Spring Boot 中实现敏感词过滤功能

28 在Spring Boot 中实现敏感词过滤功能

作者: 滔滔逐浪 | 来源:发表于2023-11-13 17:07 被阅读0次

要在Spring Boot 中实现敏感词过滤功能,可以使用一些现有的java库来处理敏感词过滤。例如,可以使用Ansj中文分词库或者使用一些其他开源的敏感词过滤库。以下是一个使用Ansj实现敏感词过滤的简单示例:
首选i在pom.xml 文件中添加依赖:

<!-- Ansj中文分词库 -->
<dependency>
    <groupId>org.ansj</groupId>
    <artifactId>ansj_seg</artifactId>
    <version>5.1.2</version>
</dependency>

接下来,在 application.properties 文件中添加配置:

# 敏感词过滤配置
sensitive.word.file-path=classpath:sensitive-words.txt

在类库路径下创建一个名为 sensitive-words.txt 的文件,其中包含敏感词列表,每个词占一行。
sensitive-words.txt 文件内容示例:

敏感词1
敏感词2
敏感词3

接下来,配置 SensitiveWordFilter 过滤器的 Bean。在 Spring Boot 应用配置类中添加以下配置:

package com.taotao.test2.config;


import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author wangjin
 * @date 2023年12月01日 15:38
 */
@Configuration
public class AppConfig {

    @Bean
    public SensitiveWordFilter sensitiveWordFilter() {
        return new SensitiveWordFilter();
    }
}


这样,Spring容器会自动创建SensitiveWordFilter 的实例,并且注入所需的敏感词文件路径。在服务类或者控制器中,可以通过@Autowired注解来注入 SensitiveWordFilter

然后,创建一个敏感词过滤的工具类,例如SensitiveWordFilter.java

package com.taotao.test2.config;

import org.ansj.domain.Term;
import org.ansj.splitWord.analysis.ToAnalysis;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.stereotype.Component;
import org.springframework.util.FileCopyUtils;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
 * @author wangjin
 * @date 2023年12月01日 15:49
 */
@Component
public class SensitiveWordFilter {
    @Value("${sensitive.word.file-path}")
    private Resource sensitiveWordFile;

    private Set<String> sensitiveWords;
    public SensitiveWordFilter() {
        this.sensitiveWords = loadSensitiveWords();
    }

    private Set<String> loadSensitiveWords() {
        Set<String> words =new HashSet<>();
        try{
            //敏感词文件中加载敏感词
            String content = new String(FileCopyUtils.copyToByteArray(sensitiveWordFile.getInputStream()), "UTF-8");
             String[] wordArray=content.split("\n");
             for(String word: wordArray){
                 words.add(word.trim());
             }
        }catch (Exception e){
            e.getCause();
        }
        return  words;
    }

   public  String filterSensitiveWords(String input){
        List<Term> terms =ToAnalysis.parse(input).getTerms();
        StringBuilder filteredText=new StringBuilder(input);
        for(Term term: terms){
            if(sensitiveWords.contains(term.getName())){
                //将敏感词替换为*
                replaceSensitiveWord(filteredText, term.getName());
            }
        }
        return  filteredText.toString();
   }

    private void replaceSensitiveWord(StringBuilder text, String sensitiveWord) {
        int index=text.indexOf(sensitiveWord);
        while (index !=-1){
            text.replace(index, index + sensitiveWord.length(), "*");
            index = text.indexOf(sensitiveWord, index + 1);
        }
    }
}

最后,在服务类或者控制器中使用SensitiveWordFilter 进行敏感词过滤:


package com.taotao.test2.controller;

import com.taotao.test2.config.SensitiveWordFilter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;

import org.springframework.web.bind.annotation.RestController;

/**
 * @author wangjin
 * @date 2023年12月01日 16:08
 */
@RestController
public class YourController {

    @Autowired
    private SensitiveWordFilter sensitiveWordFilter;

    @PostMapping("/filter")
    public String filterSensitiveWords(@RequestBody String input) {
        String filteredText =sensitiveWordFilter.filterSensitiveWords(input);
        return  filteredText;
    }
}

这只是一个简单的敏感词过滤的实现示例,在实际应用中,可能需要更复杂的算法或结合其他库来进行全面的敏感词过滤。

相关文章

网友评论

      本文标题:28 在Spring Boot 中实现敏感词过滤功能

      本文链接:https://www.haomeiwen.com/subject/wkjdwdtx.html