Java实现敏感词校验

219 阅读2分钟

注:本文为学习时记录的笔记,内容尚浅,后续有时间可能会完善

前言

平时工作中,只要涉及到用户可以自由发言(博客、文档、论坛),就要考虑内容的敏感性处理。

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);