美文网首页
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