一、概括
sensitive-word 基于 DFA 算法实现的高性能敏感词工具。
- Github地址:https://github.com/houbb/sensitive-word
- Maven地址:https://mvnrepository.com/artifact/com.github.houbb/sensitive-word
二、特性
-
6W+ 词库,且不断优化更新
-
基于 fluent-api 实现,使用优雅简洁
全角半角互换、英文大小写互换、数字常见形式的互换、中文繁简体互换、英文常见形式的互换、忽略重复词等
三、使用接入
3.1、Maven 引入
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sensitive-word</artifactId>
<version>0.12.0</version>
</dependency>
3.2、编写代码
这里我们使用其中的4个方法。
@RestController
@RequestMapping("/word")
public class WordController {
@GetMapping(value = "/checkWord")
public String checkWord(String text) {
StringBuffer sb = new StringBuffer();
//判断是否包含敏感词
if(SensitiveWordHelper.contains(text)) {
sb.append(text).append(":是敏感词").append("</br>");
} else {
sb.append(text).append(":非敏感词").append("</br>");
}
//返回第一个敏感词
String word = SensitiveWordHelper.findFirst(text);
sb.append("第一个敏感词:").append(word).append("</br>");
//默认的替换策略
String result = SensitiveWordHelper.replace(text);
sb.append("*替换敏感词:").append(result).append("</br>");
//指定替换的内容
String result2 = SensitiveWordHelper.replace(text, '0');
sb.append("指定0替换敏感词:").append(result2).append("</br>");
return sb.toString();
}
}
我们请求接口,如下图:
除了上面的4个方法,sensitive-word还提供其他过滤敏感词的方法。
SensitiveWordHelper
作为敏感词的工具类,核心方法如下:
方法 | 参数 | 返回值 | 说明 |
---|---|---|---|
contains(String) | 待验证的字符串 | 布尔值 | 验证字符串是否包含敏感词 |
replace(String, ISensitiveWordReplace) | 使用指定的替换策略替换敏感词 | 字符串 | 返回脱敏后的字符串 |
replace(String, char) | 使用指定的 char 替换敏感词 | 字符串 | 返回脱敏后的字符串 |
replace(String) | 使用 * 替换敏感词 |
字符串 | 返回脱敏后的字符串 |
findAll(String) | 待验证的字符串 | 字符串列表 | 返回字符串中所有敏感词 |
findFirst(String) | 待验证的字符串 | 字符串 | 返回字符串中第一个敏感词 |
findAll(String, IWordResultHandler) | IWordResultHandler 结果处理类 | 字符串列表 | 返回字符串中所有敏感词 |
findFirst(String, IWordResultHandler) | IWordResultHandler 结果处理类 | 字符串 | 返回字符串中第一个敏感词 |
tags(String) | 获取敏感词的标签 | 敏感词字符串 | 返回敏感词的标签列表 |
3.3、自定义敏感词,和自定义敏感词白名单
自定义敏感词
@Component
public class MyDdWordDeny implements IWordDeny {
@Override
public List<String> deny() {
return Arrays.asList("天气");
}
}
自定义敏感词白名单
@Component
public class MyWordAllow implements IWordAllow {
@Override
public List<String> allow() {
return Arrays.asList("五星红旗");
}
}
添加SpringBoot配置
@Configuration
public class SpringSensitiveWordConfig {
@Autowired
private MyWordAllow myWordAllow;
@Autowired
private MyWordDeny myWordDeny;
/**
* 初始化引导类
* @return 初始化引导类
* @since 1.0.0
*/
@Bean
public SensitiveWordBs sensitiveWordBs() {
SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()
.wordAllow(WordAllows.chains(myWordAllow))
.wordDeny(WordDenys.chains(myWordDeny))
.init();
return sensitiveWordBs;
}
}
这里不能使用SensitiveWordHelper,使用SensitiveWordBs
@RestController
@RequestMapping("/word")
public class WordController {
@Autowired
private SensitiveWordBs sensitiveWordBs;
@GetMapping(value = "/checkWord")
public String checkWord(String text) {
StringBuffer sb = new StringBuffer();
//判断是否包含敏感词
if(sensitiveWordBs.contains(text)) {
sb.append(text).append(":是敏感词").append("</br>");
} else {
sb.append(text).append(":非敏感词").append("</br>");
}
//返回第一个敏感词
String word = sensitiveWordBs.findFirst(text);
sb.append("第一个敏感词:").append(word).append("</br>");
//默认的替换策略
String result = sensitiveWordBs.replace(text);
sb.append("*替换敏感词:").append(result).append("</br>");
return sb.toString();
}
}
我们先试下自定义敏感词。如下图:
自定义敏感词白名单。如下图:
现在我们自定义敏感词过滤就全部完成了。