本文最后更新于 80 天前,其中的信息可能已经有所发展或是发生改变。
前言:
学完SpringBoot第一次做项目时,前台有一个用户发弹幕的功能,一开始没考虑到要做敏感词过滤。经过师兄提醒后,才知道疏漏了这个细节。
但是一时半会儿不知从何下手,网上的博客写的基本上都是自己引入敏感词库做拦截器过滤,对于我这种懒人小白,也看不太懂。思来想去,直接去Github上调包吧。
houbb/sensitive-word
这是一个基于 DFA 算法实现的高性能 java 敏感词过滤工具框架
该项目目前在Github上已有4k多Starred,可见质量也是不错的
README文档中可以看到有很多功能,但是作为小白,有很多我是用不上的。
以下是我的使用过程:
引入依赖
pom.xml中CV导入这段代码
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sensitive-word</artifactId>
<version>0.18.0</version>
</dependency>
封装工具类
我在utils目录下新建了一个叫WordsFilter的java类
WordsFilter.java的代码:
package com.wangyuan.utils;
import com.github.houbb.sensitive.word.bs.SensitiveWordBs;
import com.github.houbb.sensitive.word.support.ignore.SensitiveWordCharIgnores;
import com.github.houbb.sensitive.word.support.resultcondition.WordResultConditions;
/**
* 功能:敏感词过滤
* 作者:Albert
* 日期:2024/8/23 23:50
*/
public class WordsFilter {
public static boolean wordsCheck(String text) {
SensitiveWordBs wordBs = SensitiveWordBs.newInstance()
.ignoreCase(true)
.ignoreWidth(true)
.ignoreNumStyle(true)
.ignoreChineseStyle(true)
.ignoreEnglishStyle(true)
.ignoreRepeat(true)
.enableNumCheck(true)
.enableEmailCheck(true)
.enableUrlCheck(true)
.enableIpv4Check(true)
.enableWordCheck(true)
.numCheckLen(8)
.charIgnore(SensitiveWordCharIgnores.specialChars())
.wordResultCondition(WordResultConditions.alwaysTrue())
.init();
return wordBs.contains(text);
}
}
配置说明:
序号 | 方法 | 说明 | 默认值 |
---|---|---|---|
1 | ignoreCase | 忽略大小写 | true |
2 | ignoreWidth | 忽略半角圆角 | true |
3 | ignoreNumStyle | 忽略数字的写法 | true |
4 | ignoreChineseStyle | 忽略中文的书写格式 | true |
5 | ignoreEnglishStyle | 忽略英文的书写格式 | true |
6 | ignoreRepeat | 忽略重复词 | false |
7 | enableNumCheck | 是否启用数字检测。 | false |
8 | enableEmailCheck | 是有启用邮箱检测 | false |
9 | enableUrlCheck | 是否启用链接检测 | false |
10 | enableIpv4Check | 是否启用IPv4检测 | false |
11 | enableWordCheck | 是否启用敏感单词检测 | true |
12 | numCheckLen | 数字检测,自定义指定长度。 | 8 |
13 | wordTag | 词对应的标签 | none |
14 | charIgnore | 忽略的字符 | none |
15 | wordResultCondition | 针对匹配的敏感词额外加工,比如可以限制英文单词必须全匹配 | 恒为真 |
方法调用
接着在需要使用的地方直接调用方法即可:
因为做了后台,所以还在发布和修改新闻的标题上也加了过滤