SpringBoot實現敏感詞過濾功能示例
要在Spring Boot中實現敏感詞過濾功能,可以使用一些現有的Java庫來處理敏感詞過濾,例如,可以使用 Ansj 中文分詞庫或者使用一些其他開源的敏感詞過濾庫。以下是一個使用 Ansj 實現敏感詞過濾的簡單示例。
1. 首先,在 pom.xml 文件中添加依賴:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.cjc.demo</groupId>
<artifactId>TestDemo</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.6.6</version>
<relativePath />
</parent>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.ansj</groupId>
<artifactId>ansj_seg</artifactId>
<version>5.1.2</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>public</id>
<name>aliyun nexus</name>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<releases>
<enabled>true</enabled>
</releases>
</repository>
</repositories>
</project>
2. 在 application.yaml 文件中添加配置:
sensitive:
word:
file-path: classpath:sensitive-words.txt
spring:
main:
allow-bean-definition-overriding: true
3. 在類路徑下創(chuàng)建一個名為 sensitive-words.txt 的文件,其中包含敏感詞列表,每個詞占一行。
4. 配置 SensitiveWordFilter 過濾器的 Bean。在 Spring Boot 應用配置類中添加以下配置:
package cn.cjc.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class SensitiveConfig {
@Bean
public SensitiveWordFilter sensitiveWordFilter() {
return new SensitiveWordFilter();
}
}
這樣,Spring 容器會自動創(chuàng)建 SensitiveWordFilter 的實例,并且注入所需的敏感詞文件路徑。在服務類或控制器中,可以通過 @Autowired 注解來注入 SensitiveWordFilter。
然后,創(chuàng)建一個敏感詞過濾的工具類,例如 SensitiveWordFilter.java:
package cn.cjc.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 javax.annotation.PostConstruct;
import java.io.IOException;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
@Component
public class SensitiveWordFilter {
@Value("${sensitive.word.file-path}")
private Resource sensitiveWordFile;
private Set<String> sensitiveWords;
@PostConstruct
public void init() {
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 (IOException e) {
e.printStackTrace();
}
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);
}
}
}
5. 在服務類或控制器中使用 SensitiveWordFilter 進行敏感詞過濾:
package cn.cjc.controller;
import cn.cjc.config.SensitiveWordFilter;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
@RestController
public class TestController {
@Resource
private SensitiveWordFilter sensitiveWordFilter;
@PostMapping("/filter")
public String filterSensitiveWords(@RequestParam String input) {
return sensitiveWordFilter.filterSensitiveWords(input);
}
}
這只是一個簡單的敏感詞過濾的實現示例。在實際應用中,可能需要更復雜的算法或結合其他庫來進行更全面的敏感詞過濾。
到此這篇關于SpringBoot實現敏感詞過濾功能示例的文章就介紹到這了,更多相關SpringBoot 敏感詞過濾內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot使用Spring-Data-Jpa實現CRUD操作
這篇文章主要為大家詳細介紹了SpringBoot使用Spring-Data-Jpa實現CRUD操作,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-08-08

