组件地址
https://github.com/houbb/sensitive-word
网上博客版本不是最新,查看官方文档,基于0.16.1整理总结,快速上手
pom文件引入
<dependency><groupId>com.github.houbb</groupId><artifactId>sensitive-word</artifactId><version>0.16.1</version>
</dependency>
配置类
word">package com.huida.tzly.sensitive;word">import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
word">import com.github.houbb.sensitive.word.support.allow.WordAllows;
word">import com.github.houbb.sensitive.word.support.ignore.SensitiveWordCharIgnores;
word">import com.github.houbb.sensitive.word.support.resultcondition.WordResultConditions;
word">import com.github.houbb.sensitive.word.support.tag.WordTags;
word">import org.springframework.beans.factory.annotation.Autowired;
word">import org.springframework.context.annotation.Bean;
word">import org.springframework.context.annotation.Configuration;@Configuration
word">public word">class SpringSensitiveWordConfig {@Autowiredword">private MyDdWordAllow myDdWordAllow;@Autowiredword">private MyDdWordDeny myDdWordDeny;/*** 初始化引导类** @return 初始化引导类* @since 1.0.0*/@Beanword">public SensitiveWordBs sensitiveWordBs() {SensitiveWordBs sensitiveWordBs = SensitiveWordBs.newInstance()//白名单.wordAllow(WordAllows.chains(WordAllows.defaults(), myDdWordAllow))//黑名单.wordDeny(myDdWordDeny)//否启用敏感单词检测 fuck.enableWordCheck(true)//忽略大小写.ignoreCase(true)//忽略半角圆角 fuck the bad words..ignoreWidth(true)//忽略中文繁简体样式.ignoreChineseStyle(true)//忽略英文样式 Ⓕⓤc⒦ the bad words.ignoreEnglishStyle(true)// 是否忽略重复 ⒻⒻⒻfⓤuⓤ⒰cⓒ⒦ the bad words.ignoreRepeat(false)// 连续数字检测 过滤手机号、QQ等//.enableNumCheck(true)//指定连续数字检测长度//.numCheckLen(8)//邮箱检测//.enableEmailCheck(true)//网址检测 www.baidu.com//.enableUrlCheck(true)//忽略数字的写法,这个是我的微信:9⓿二肆⁹₈③⑸⒋➃㈤㊄//.ignoreNumStyle(true)//词对应的标签 属于政治或人身攻击.wordTag(WordTags.none())//忽略的字符.charIgnore(SensitiveWordCharIgnores.defaults())//针对匹配的敏感词额外加工,比如可以限制英文单词必须全匹配.wordResultCondition(WordResultConditions.alwaysTrue()).init();word">return sensitiveWordBs;}}
从数据库加载自定义敏感词白名单黑名单
word">package com.huida.tzly.sensitive;word">import com.github.houbb.sensitive.word.api.IWordAllow;
word">import com.huida.tzly.domain.TzLySensitiveWord;
word">import com.huida.tzly.service.TzLySensitiveWordService;
word">import org.springframework.beans.factory.annotation.Autowired;
word">import org.springframework.stereotype.Component;word">import java.util.Arrays;
word">import java.util.List;
word">import java.util.stream.Collectors;/*** @author binbin.hou* @since 1.0.0*/
@Component
word">public word">class MyDdWordAllow word">implements IWordAllow {@Autowiredword">private TzLySensitiveWordService tzLySensitiveWordService;@Overrideword">public List<String> allow() {// 数据库查询List<TzLySensitiveWord> list = tzLySensitiveWordService.selectTzLySensitiveWord(TzLySensitiveWord.builder().type(1).build());List<String> allowList = list.stream().map(TzLySensitiveWord::getName).collect(Collectors.toList());word">return allowList;}}
word">package com.huida.tzly.sensitive;word">import com.github.houbb.sensitive.word.api.IWordDeny;
word">import com.huida.tzly.domain.TzLySensitiveWord;
word">import com.huida.tzly.service.TzLySensitiveWordService;
word">import org.springframework.beans.factory.annotation.Autowired;
word">import org.springframework.stereotype.Component;word">import java.util.Arrays;
word">import java.util.List;
word">import java.util.stream.Collectors;/*** @author binbin.hou* @since 1.0.0*/
@Component
word">public word">class MyDdWordDeny word">implements IWordDeny {@Autowiredword">private TzLySensitiveWordService tzLySensitiveWordService;@Overrideword">public List<String> deny() {// 数据库查询List<TzLySensitiveWord> list = tzLySensitiveWordService.selectTzLySensitiveWord(TzLySensitiveWord.builder().type(0).build());List<String> denyList = list.stream().map(TzLySensitiveWord::getName).collect(Collectors.toList());word">return denyList;}}
@Overrideword">public String checkMessage(Long messageId, String message, List<TzLyUser> tzLyUserList) {//找出全部敏感词List<String> sensitiveWordList = SensitiveWordHelper.findAll(message);// 判断发送的消息是否包含扬言敏感词word">if (CollectionUtils.isEmpty(sensitiveWordList)) {word">return word">null;}String finalMessage = message;//将敏感词替换成**word">for (String word : sensitiveWordList) {StringBuilder sb = word">new StringBuilder();word">for (word">int i = 0; i < word.length(); i++) {sb.append("*");}finalMessage = finalMessage.replace(word, sb.toString());}// 批量插入敏感词记录mergeBatch(messageId, tzLyUserList, StrUtil.join(",", sensitiveWordList),message);word">return finalMessage;}