{"id":44415806,"url":"https://github.com/jaguarliuu/diting","last_synced_at":"2026-02-12T08:25:15.131Z","repository":{"id":271579151,"uuid":"913906579","full_name":"jaguarliuu/diting","owner":"jaguarliuu","description":"谛听 - 轻量级、可扩展的敏感词识别与数据脱敏组件","archived":false,"fork":false,"pushed_at":"2025-02-08T03:12:20.000Z","size":4416,"stargazers_count":15,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-03T16:29:48.163Z","etag":null,"topics":["sensitive","sensitive-data-discovery","sensitive-word","sensitive-words"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jaguarliuu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-08T15:24:12.000Z","updated_at":"2025-02-08T03:12:24.000Z","dependencies_parsed_at":"2025-01-08T16:49:35.720Z","dependency_job_id":"bb409e3b-69e3-4e1b-961e-a7be736ba21e","html_url":"https://github.com/jaguarliuu/diting","commit_stats":null,"previous_names":["eumenides1/diting","jaguarliuu/diting"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/jaguarliuu/diting","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaguarliuu%2Fditing","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaguarliuu%2Fditing/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaguarliuu%2Fditing/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaguarliuu%2Fditing/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jaguarliuu","download_url":"https://codeload.github.com/jaguarliuu/diting/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jaguarliuu%2Fditing/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29361817,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T01:03:07.613Z","status":"online","status_checked_at":"2026-02-12T02:00:06.911Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["sensitive","sensitive-data-discovery","sensitive-word","sensitive-words"],"created_at":"2026-02-12T08:25:13.315Z","updated_at":"2026-02-12T08:25:15.125Z","avatar_url":"https://github.com/jaguarliuu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"谛听 - 轻量级高性能敏感词识别与数据脱敏组件\n\n`Diting` 是一个轻量级、可扩展的敏感词识别组件，支持多种方式加载敏感词库（TXT 文件、JSON 文件、MySQL 数据库、Redis），并提供基于 AC 自动机的高效敏感词匹配功能。\n\n在中国神话中，谛听是地藏菩萨座下的神兽，它耳听八方，能辨善恶，能识真伪，是守护正义的象征。我们的项目 谛听（Diting） ，正是以此为灵感，致力于成为敏感数据识别领域的“神兽”！它用“耳朵”聆听每一段文本，用“智慧”辨别每一个敏感词，守护您的数据安全与内容合规。\n\n## 目录\n\n- [特性](#特性)\n- [技术栈](#技术栈)\n- [安装](#安装)\n- [配置](#配置)\n- [使用](#使用)\n- [未来规划](#未来规划)\n- [贡献](#贡献)\n- [许可证](#许可证)\n- [联系方式](#联系方式)\n- [致谢](#致谢)\n\n## 特性\n\n- **多种敏感词加载方式**：支持从 TXT 文件、JSON 文件、MySQL 数据库和 Redis 中加载敏感词库，满足不同场景的需求。\n- **高效敏感词匹配**：基于 Aho-Corasick 自动机算法，实现多敏感词的高效匹配。\n- **实时敏感词替换**：提供敏感词检测和替换功能，支持自定义替换字符。\n- **灵活的配置**：通过 Spring Boot 配置文件轻松管理加载器和其他相关设置。\n- **可扩展架构**：设计模块化，便于未来功能的扩展和集成。\n\n## 技术栈\n\n- **Java 17**\n- **Spring Boot 3.1.2**\n- **Aho-Corasick 算法**\n- **Maven / Gradle**\n- **JUnit 5**\n- **Mockito**\n\n## 安装\n\n### 前提条件\n\n确保您的系统已安装以下软件：\n\n- **Java Development Kit (JDK) 17 或更高版本**\n- **Maven 3.6+** 或 **Gradle 6.0+**\n- **Git**\n\n\n### 克隆仓库\n\n```bash\ngit clone https://github.com/yourusername/diting.git\ncd diting\n```\n### 构建项目\n- 使用 maven\n```shell\nmvn clean install\n```\n- 使用Gradle\n```shell\ngradle clean build\n```\n## 配置\nDiting 的配置文件位于 src/main/resources/application.yml 或 application.properties。以下是一个使用 application.yml 的示例：\n```yaml\nsensitive-word:\n  loaders:\n    txt:\n      enabled: true\n      filePath: classpath:sensitive_words.txt\n      delimiter: \"\\n\"\n    json:\n      enabled: false\n      filePath: /path/to/sensitive_words.json\n    mysql:\n      enabled: false\n      table: sensitive_words\n      columns: word\n      conditions:\n        status: active\n    redis:\n      enabled: false\n      key: sensitive_words_key\n  default-loader:\n    enabled: true\n```\n#### 配置属性说明\n\n| 属性                                      | 描述                        | 类型                     | 默认值  |\n|-------------------------------------------|-----------------------------|--------------------------|---------|\n| `sensitive-word.loaders.txt.enabled`      | 是否启用 TXT 加载器         | `boolean`                | `false` |\n| `sensitive-word.loaders.txt.filePath`     | TXT 文件路径                 | `String`                 | `null`  |\n| `sensitive-word.loaders.txt.delimiter`    | 分隔符                       | `String`                 | `\"\\n\"`  |\n| `sensitive-word.loaders.json.enabled`     | 是否启用 JSON 加载器         | `boolean`                | `false` |\n| `sensitive-word.loaders.json.filePath`    | JSON 文件路径                | `String`                 | `null`  |\n| `sensitive-word.loaders.mysql.enabled`    | 是否启用 MySQL 加载器        | `boolean`                | `false` |\n| `sensitive-word.loaders.mysql.table`      | MySQL 表名                   | `String`                 | `null`  |\n| `sensitive-word.loaders.mysql.columns`    | 列名                         | `String`                 | `null`  |\n| `sensitive-word.loaders.mysql.conditions` | 查询条件                     | `Map\u003cString, String\u003e`    | `{}`    |\n| `sensitive-word.loaders.redis.enabled`    | 是否启用 Redis 加载器        | `boolean`                | `false` |\n| `sensitive-word.loaders.redis.key`        | Redis Key                    | `String`                 | `null`  |\n| `sensitive-word.default-loader.enabled`   | 是否启用默认加载器           | `boolean`                | `true`  |\n\n\u003e 注意：确保仅启用您需要的加载器，以优化性能和资源使用。\n\n----\n\n## 使用\nDiting 提供了 DitingUtil，可以在您的服务或控制器中直接调用其方法来检测和替换敏感词。\n#### 注入 SensitiveWordService\n```java\nimport com.rookie.diting.service.SensitiveWordService;\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.springframework.stereotype.Service;\n\n@Service\npublic class YourService {\n    public void processText(String text) {\n        // 检测敏感词\n        boolean contains = DitingUtil.containsSensitiveWord(text);\n        if (contains) {\n            // 获取敏感词\n            Set\u003cString\u003e words = DitingUtil.getSensitiveWords(text);\n            // 替换敏感词\n            String sanitized = DitingUtil.replaceSensitiveWords(text, '*');\n            // 处理逻辑\n            System.out.println(\"包含敏感词：\" + words);\n            System.out.println(\"替换后的文本：\" + sanitized);\n        } else {\n            // 无敏感词处理逻辑\n            System.out.println(\"文本中不包含敏感词。\");\n        }\n    }\n}\n```\n#### DitingUtil 方法说明\n- boolean containsSensitiveWord(String text) 检查文本是否包含敏感词。\n- Set\u003cString\u003e getSensitiveWords(String text) 获取文本中的敏感词集合。\n- String replaceSensitiveWords(String text, char replace)替换文本中的敏感词，使用指定的替换字符。\n\n#### 开启谛听控制台\n谛听`0.0.6以上`版本提供了敏感词检测和脱敏工具的控制台，这是一个可选的功能，可以通过简单的配置快速启用。\n\n1. 在你的项目中，除了引入敏感词检测组件的依赖，还需要确保引入以下必要的 Web 和 Thymeleaf 依赖：\n```xml\n\u003cdependencies\u003e\n    \u003c!-- 敏感词检测组件 --\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.example\u003c/groupId\u003e\n        \u003cartifactId\u003editing-spring-boot-starter\u003c/artifactId\u003e\n        \u003cversion\u003e0.0.6\u003c/version\u003e\n    \u003c/dependency\u003e\n    \n    \u003c!-- Web Starter --\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n        \u003cartifactId\u003espring-boot-starter-web\u003c/artifactId\u003e\n    \u003c/dependency\u003e\n    \n    \u003c!-- Thymeleaf Starter --\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003eorg.springframework.boot\u003c/groupId\u003e\n        \u003cartifactId\u003espring-boot-starter-thymeleaf\u003c/artifactId\u003e\n    \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\u003e注意：\n\u003e - 如果项目中未引入 spring-boot-starter-web 和 spring-boot-starter-thymeleaf，控制台页面将无法正常运行。\n\u003e - 如果你已经使用其他模板引擎（如 FreeMarker），可以根据需要替换 Thymeleaf，但需要自行重写页面模板。\n\n2. 在 application.yml 或 application.properties 文件中配置以下内容：\n   - **使用 application.yml 配置**\n       ```yml\n       sensitive-word:\n         console:\n           enabled: true  # 启用控制台功能\n       ```\n   - **使用 application.properties 配置**\n        ```properties\n           sensitive-word.console.enabled=true  # 启用控制台功能\n        ```\n     \u003e 控制台功能 默认开启，如果需要关闭，可以将 sensitive-word.console.enabled 设置为 false。\n\n3. 当控制台功能启用后，启动项目后可以通过以下路径访问：\n   - URL 地址: http://localhost:8080/sensitive-word-console\n\n    页面功能包含两个主要区域：\n   1.\t检测敏感词：输入文本，检测其中是否包含敏感词，并展示检测结果。\n   2.\t脱敏处理：输入文本和替换字符，处理敏感词并展示脱敏后的结果。\n\n4. 如果你需要自定义控制台页面，可以按以下步骤操作来覆盖默认模板文件\n   1.\t在你的项目的 src/main/resources/templates 目录中创建一个名为 sensitive-word-console.html 的文件。\n   2.\t修改或替换默认的控制台页面内容。\n\n    修改样式 ：如果需要自定义页面样式，可以直接修改 Thymeleaf 模板中的 CSS，也可以引入你自己的样式文件。\n   如果需要自定义页面样式，可以直接修改 Thymeleaf 模板中的 CSS，也可以引入你自己的样式文件。\n![img.png](static/diting_console.png)\n## 未来规划\n\n目前，Diting 主要提供了服务层的敏感词检测与替换功能。未来，我们计划引入以下功能以提升组件的易用性和集成性：\n- API 接口\n提供 RESTful API 端点，方便前端或其他服务通过 HTTP 请求调用敏感词检测与替换功能。\n- SDK 包装\n提供多语言 SDK（如 Python、JavaScript），简化不同平台和语言的集成过程。\n- 动态敏感词管理\n支持在运行时动态添加、删除或更新敏感词库，无需重启服务。\n- 高级配置选项\n提供更多的配置选项，如敏感词匹配模式、忽略大小写等。\n- 日志与监控\n集成日志记录和监控功能，帮助用户跟踪敏感词匹配情况和性能指标。\n\n## 贡献\n\n我们欢迎大家为这个项目做出贡献！如果你想贡献代码，请遵循以下步骤：\n\n1. Fork 本仓库并将其克隆到本地。\n2. 创建一个新分支（`git checkout -b feature/your-feature-name`）。\n3. 进行修改并确保已充分测试。\n4. 提交你的修改（`git commit -am 'Add new feature'`）。\n5. 将更改推送到该分支（`git push origin feature/your-feature-name`）。\n6. 提交一个 Pull Request（PR）到 `main` 分支。\n\n在提交 Pull Request 前，请确保你的修改符合以下要求：\n- 代码应当有良好的注释。\n- 遵循项目的编码风格和规范。\n- 新功能应有相应的测试，若适用。\n\n如果有任何问题或需要帮助，请随时创建一个 Issue，我们会尽快为你提供帮助。\n\n---\n\n## 许可证\n\n本项目采用 [MIT 许可证](LICENSE)，允许个人、学术或商业用途的代码使用、修改、分发和再许可。\n\n---\n\n## 联系方式\n\n如果你有任何问题、建议或需要进一步了解项目的内容，可以通过以下方式联系我：\n\n- **项目维护者**: [Jaguarliu](https://jaguarliu.me)\n- **电子邮件**: 18829526908@163.com\n- **GitHub**: [Eumenides1](https://github.com/Eumenides1)\n\n---","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaguarliuu%2Fditing","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjaguarliuu%2Fditing","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjaguarliuu%2Fditing/lists"}