要在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;
}
}
这只是一个简单的敏感词过滤的实现示例,在实际应用中,可能需要更复杂的算法或结合其他库来进行全面的敏感词过滤。
网友评论