注:本文为学习时记录的笔记,内容尚浅,后续有时间可能会完善
前言
平时工作中,只要涉及到用户可以自由发言(博客、文档、论坛),就要考虑内容的敏感性处理。
sensitive-word 基于 DFA 算法实现的高性能敏感词工具。工具使用 java 实现,帮助我们解决常见的问题。
基本使用
引入依赖
<!-- https://mvnrepository.com/artifact/com.github.houbb/sensitive-word -->
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sensitive-word</artifactId>
<version>0.8.0</version>
</dependency>
为了方便使用,定义SensitiveWordConfig声明SensitiveWordBs bean
/**
* @author www.luckysj.top 刘仕杰
* @description 敏感词配置
* @create 2023/12/07 11:34:08
*/
@Slf4j
@Configuration
public class SensitiveWordConfig {
@Bean
public SensitiveWordBs sensitiveWordBs(){
return SensitiveWordBs.newInstance()
// 开启下述后可以记录日志,但是发现替换词变成了空格而不是*,暂不知如何解决
// .wordReplace((stringBuilder, chars, wordResult, iWordContext) -> {
// String sensitiveWord = InnerWordCharUtils.getString(chars, wordResult);
// log.info("检测到敏感词: {}", sensitiveWord);
// })
.ignoreCase(true) //忽略大小写
.ignoreWidth(true) //忽略半角圆角
.ignoreNumStyle(true) //忽略数字的写法
.ignoreChineseStyle(true) //忽略中文的书写格式
.ignoreEnglishStyle(true) //忽略英文的书写格式
.ignoreRepeat(false) //忽略重复词
.enableNumCheck(true) //是否启用数字检测。
.enableEmailCheck(true) //是有启用邮箱检测
.enableUrlCheck(true) //是否启用链接检测
.enableWordCheck(true) //是否启用敏感单词检测
.numCheckLen(1024) //数字检测,自定义指定长度
.init();
}
}
SensitiveWordBs 作为敏感词的引导类,核心方法如下:
| 方法 | 参数 | 返回值 | 说明 |
|---|---|---|---|
| newInstance() | 无 | 引导类 | 初始化引导类 |
| contains(String) | 待验证的字符串 | 布尔值 | 验证字符串是否包含敏感词 |
| findAll(String) | 待验证的字符串 | 字符串列表 | 返回字符串中所有敏感词 |
| replace(String, char) | 使用指定的 char 替换敏感词 | 字符串 | 返回脱敏后的字符串 |
| replace(String) | 使用*替换敏感词 | 字符串 | 返回脱敏后的字符串 |
简单使用
@Resource
private SensitiveWordBs words;
String content = message.getContent();
// 替换敏感词
String replace = words.replace(content);