谛听 - 轻量级高性能敏感词识别与数据脱敏组件
Diting
是一个轻量级、可扩展的敏感词识别组件,支持多种方式加载敏感词库(TXT 文件、JSON 文件、MySQL 数据库、Redis),并提供基于 AC 自动机的高效敏感词匹配功能。
在中国神话中,谛听是地藏菩萨座下的神兽,它耳听八方,能辨善恶,能识真伪,是守护正义的象征。我们的项目 谛听(Diting) ,正是以此为灵感,致力于成为敏感数据识别领域的“神兽”!它用“耳朵”聆听每一段文本,用“智慧”辨别每一个敏感词,守护您的数据安全与内容合规。
- 多种敏感词加载方式:支持从 TXT 文件、JSON 文件、MySQL 数据库和 Redis 中加载敏感词库,满足不同场景的需求。
- 高效敏感词匹配:基于 Aho-Corasick 自动机算法,实现多敏感词的高效匹配。
- 实时敏感词替换:提供敏感词检测和替换功能,支持自定义替换字符。
- 灵活的配置:通过 Spring Boot 配置文件轻松管理加载器和其他相关设置。
- 可扩展架构:设计模块化,便于未来功能的扩展和集成。
- Java 17
- Spring Boot 3.1.2
- Aho-Corasick 算法
- Maven / Gradle
- JUnit 5
- Mockito
确保您的系统已安装以下软件:
- Java Development Kit (JDK) 17 或更高版本
- Maven 3.6+ 或 Gradle 6.0+
- Git
git clone https://github.com/yourusername/diting.git
cd diting
- 使用 maven
mvn clean install
- 使用Gradle
gradle clean build
Diting 的配置文件位于 src/main/resources/application.yml 或 application.properties。以下是一个使用 application.yml 的示例:
sensitive-word:
loaders:
txt:
enabled: true
filePath: classpath:sensitive_words.txt
delimiter: "\n"
json:
enabled: false
filePath: /path/to/sensitive_words.json
mysql:
enabled: false
table: sensitive_words
columns: word
conditions:
status: active
redis:
enabled: false
key: sensitive_words_key
default-loader:
enabled: true
属性 | 描述 | 类型 | 默认值 |
---|---|---|---|
sensitive-word.loaders.txt.enabled |
是否启用 TXT 加载器 | boolean |
false |
sensitive-word.loaders.txt.filePath |
TXT 文件路径 | String |
null |
sensitive-word.loaders.txt.delimiter |
分隔符 | String |
"\n" |
sensitive-word.loaders.json.enabled |
是否启用 JSON 加载器 | boolean |
false |
sensitive-word.loaders.json.filePath |
JSON 文件路径 | String |
null |
sensitive-word.loaders.mysql.enabled |
是否启用 MySQL 加载器 | boolean |
false |
sensitive-word.loaders.mysql.table |
MySQL 表名 | String |
null |
sensitive-word.loaders.mysql.columns |
列名 | String |
null |
sensitive-word.loaders.mysql.conditions |
查询条件 | Map<String, String> |
{} |
sensitive-word.loaders.redis.enabled |
是否启用 Redis 加载器 | boolean |
false |
sensitive-word.loaders.redis.key |
Redis Key | String |
null |
sensitive-word.default-loader.enabled |
是否启用默认加载器 | boolean |
true |
注意:确保仅启用您需要的加载器,以优化性能和资源使用。
Diting 提供了 DitingUtil,可以在您的服务或控制器中直接调用其方法来检测和替换敏感词。
import com.rookie.diting.service.SensitiveWordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class YourService {
public void processText(String text) {
// 检测敏感词
boolean contains = DitingUtil.containsSensitiveWord(text);
if (contains) {
// 获取敏感词
Set<String> words = DitingUtil.getSensitiveWords(text);
// 替换敏感词
String sanitized = DitingUtil.replaceSensitiveWords(text, '*');
// 处理逻辑
System.out.println("包含敏感词:" + words);
System.out.println("替换后的文本:" + sanitized);
} else {
// 无敏感词处理逻辑
System.out.println("文本中不包含敏感词。");
}
}
}
- boolean containsSensitiveWord(String text) 检查文本是否包含敏感词。
- Set getSensitiveWords(String text) 获取文本中的敏感词集合。
- String replaceSensitiveWords(String text, char replace)替换文本中的敏感词,使用指定的替换字符。
谛听0.0.6以上
版本提供了敏感词检测和脱敏工具的控制台,这是一个可选的功能,可以通过简单的配置快速启用。
- 在你的项目中,除了引入敏感词检测组件的依赖,还需要确保引入以下必要的 Web 和 Thymeleaf 依赖:
<dependencies>
<!-- 敏感词检测组件 -->
<dependency>
<groupId>com.example</groupId>
<artifactId>diting-spring-boot-starter</artifactId>
<version>0.0.6</version>
</dependency>
<!-- Web Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Thymeleaf Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>
注意:
- 如果项目中未引入 spring-boot-starter-web 和 spring-boot-starter-thymeleaf,控制台页面将无法正常运行。
- 如果你已经使用其他模板引擎(如 FreeMarker),可以根据需要替换 Thymeleaf,但需要自行重写页面模板。
-
在 application.yml 或 application.properties 文件中配置以下内容:
- 使用 application.yml 配置
sensitive-word: console: enabled: true # 启用控制台功能
- 使用 application.properties 配置
sensitive-word.console.enabled=true # 启用控制台功能
控制台功能 默认开启,如果需要关闭,可以将 sensitive-word.console.enabled 设置为 false。
- 使用 application.yml 配置
-
当控制台功能启用后,启动项目后可以通过以下路径访问:
页面功能包含两个主要区域:
- 检测敏感词:输入文本,检测其中是否包含敏感词,并展示检测结果。
- 脱敏处理:输入文本和替换字符,处理敏感词并展示脱敏后的结果。
-
如果你需要自定义控制台页面,可以按以下步骤操作来覆盖默认模板文件
- 在你的项目的 src/main/resources/templates 目录中创建一个名为 sensitive-word-console.html 的文件。
- 修改或替换默认的控制台页面内容。
修改样式 :如果需要自定义页面样式,可以直接修改 Thymeleaf 模板中的 CSS,也可以引入你自己的样式文件。 如果需要自定义页面样式,可以直接修改 Thymeleaf 模板中的 CSS,也可以引入你自己的样式文件。
目前,Diting 主要提供了服务层的敏感词检测与替换功能。未来,我们计划引入以下功能以提升组件的易用性和集成性:
- API 接口 提供 RESTful API 端点,方便前端或其他服务通过 HTTP 请求调用敏感词检测与替换功能。
- SDK 包装 提供多语言 SDK(如 Python、JavaScript),简化不同平台和语言的集成过程。
- 动态敏感词管理 支持在运行时动态添加、删除或更新敏感词库,无需重启服务。
- 高级配置选项 提供更多的配置选项,如敏感词匹配模式、忽略大小写等。
- 日志与监控 集成日志记录和监控功能,帮助用户跟踪敏感词匹配情况和性能指标。
我们欢迎大家为这个项目做出贡献!如果你想贡献代码,请遵循以下步骤:
- Fork 本仓库并将其克隆到本地。
- 创建一个新分支(
git checkout -b feature/your-feature-name
)。 - 进行修改并确保已充分测试。
- 提交你的修改(
git commit -am 'Add new feature'
)。 - 将更改推送到该分支(
git push origin feature/your-feature-name
)。 - 提交一个 Pull Request(PR)到
main
分支。
在提交 Pull Request 前,请确保你的修改符合以下要求:
- 代码应当有良好的注释。
- 遵循项目的编码风格和规范。
- 新功能应有相应的测试,若适用。
如果有任何问题或需要帮助,请随时创建一个 Issue,我们会尽快为你提供帮助。
本项目采用 MIT 许可证,允许个人、学术或商业用途的代码使用、修改、分发和再许可。
如果你有任何问题、建议或需要进一步了解项目的内容,可以通过以下方式联系我:
- 项目维护者: Jaguarliu
- 电子邮件: 18829526908@163.com
- GitHub: Eumenides1