SpringBoot 使用 sensitive-word 过滤敏感词

原创
2023/12/18 18:40
阅读数 853

一、概括

sensitive-word 基于 DFA 算法实现的高性能敏感词工具。

 

二、特性

全角半角互换、英文大小写互换、数字常见形式的互换、中文繁简体互换、英文常见形式的互换、忽略重复词等

 

三、使用接入

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

}

我们先试下自定义敏感词。如下图:

自定义敏感词白名单。如下图:

现在我们自定义敏感词过滤就全部完成了。

 

更多文章

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
0 评论
0 收藏
0
分享
返回顶部
顶部