Springboot 敏感词过滤

参考:网站是怎么屏蔽脏话的呢:简单学会SpringBoot项目敏感词、违规词过滤方案_springboot 项目关键词过滤-CSDN博客

【敏感词过滤】_wx60d2a462203aa的技术博客_51CTO博客

1、添加依赖

复制代码
<dependency>
            <groupId>com.github.houbb</groupId>
            <artifactId>sensitive-word</artifactId>
            <version>0.17.0</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.1</version>
            <scope>test</scope>
        </dependency>

2、SensitiveConfig

复制代码
@Configuration
public class SensitiveConfig {

    @Autowired
    private MyWordAllow myWordAllow;

    @Autowired
    private MyWordDeny myWordDeny;

    /**
     * 初始化引导类
     * @return 初始化引导类
     * @since 1.0.0
     */
    @Bean
    public SensitiveWordBs sensitiveWordBs() {
        // 配置默认敏感词 + 自定义敏感词
        IWordDeny wordDeny = WordDenys.chains(WordDenys.defaults(), myWordDeny);
        // 配置默认非敏感词 + 自定义非敏感词

        IWordAllow wordAllow = WordAllows.chains(WordAllows.defaults(), myWordAllow);

        return SensitiveWordBs.newInstance()
                // 忽略大小写
                .ignoreCase(true)
                // 忽略半角圆角
                .ignoreWidth(true)
                // 忽略数字的写法
                .ignoreNumStyle(true)
                // 忽略中文的书写格式:简繁体
                .ignoreChineseStyle(true)
                // 忽略英文的书写格式
                .ignoreEnglishStyle(true)
                // 忽略重复词
                .ignoreRepeat(false)
                // 是否启用数字检测
                .enableNumCheck(true)
                // 是否启用邮箱检测
                .enableEmailCheck(true)
                // 是否启用链接检测
                .enableUrlCheck(true)
                // 数字检测,自定义指定长度
                .numCheckLen(8)
                // 配置自定义敏感词
                .wordDeny(wordDeny)
                // 配置非自定义敏感词
                .wordAllow(wordAllow)
                .init();
    }

3、自定义 敏感词

复制代码
@Slf4j
@Component
public class MyWordDeny implements IWordDeny {

    @Override
    public List<String> deny() {
        List<String> list = new ArrayList<String>();;
        try {
            Resource mySensitiveWords = new ClassPathResource("sensitive/mySensitiveWords.txt");
            Path mySensitiveWordsPath = Paths.get(mySensitiveWords.getFile().getPath());
            list =  Files.readAllLines(mySensitiveWordsPath, StandardCharsets.UTF_8);
        } catch (IOException ioException) {
            log.error("读取敏感词文件错误!"+ ioException.getMessage());
        }
        return list;
    }

}

自定义非敏感词

复制代码
@Slf4j
@Component
public class MyWordAllow implements IWordAllow {

    @Override
    public List<String> allow() {
        List<String> list = new ArrayList<String>();;
        try {
            Resource myAllowWords = new ClassPathResource("sensitive/myAllowWords.txt");
            Path myAllowWordsPath = Paths.get(myAllowWords.getFile().getPath());
            list =  Files.readAllLines(myAllowWordsPath, StandardCharsets.UTF_8);
        } catch (IOException ioException) {
            log.error("读取非敏感词文件错误!"+ ioException.getMessage());
        }
        return list;
    }

}

3、 Service类

复制代码
@Component
public class SensitiveWordService {

    @Autowired
    private SensitiveWordBs sensitiveWordBs;

    // 刷新敏感词库与非敏感词库缓存
    public void refresh(){
        sensitiveWordBs.init();
    }
    // 判断是否含有敏感词
    public boolean contains(String text){
        return sensitiveWordBs.contains(text);
    }

    // 使用默认替换符 * 进行替换敏感词
    public String replace(String text){
        return sensitiveWordBs.replace(text);
    }

    // 返回所有敏感词
    public List<String> findAll(String text){
        return sensitiveWordBs.findAll(text);
    }
}

4、测试类

复制代码
@RunWith(SpringRunner.class)
@SpringBootTest(classes = {MyGptApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@ContextConfiguration(classes = MyGptApplication.class)
public class SensitiveTest {

    @Autowired
    private SensitiveWordService sensitiveWordService;

    @Test
    public void test() {
        String s = "赌博 test";
        String s1 = sensitiveWordService.replace(s);
        Boolean flag = sensitiveWordService.contains(s);
        if (flag) {
            System.out.println("请调整问题,避免受限内容,我们将更好地协助您。");
        }
        System.out.println(s1);
    }

}

5、文本目录

相关推荐
Hx_Ma1611 小时前
SpringMVC框架提供的转发和重定向
java·开发语言·servlet
期待のcode12 小时前
原子操作类LongAdder
java·开发语言
舟舟亢亢13 小时前
Java集合笔记总结
java·笔记
小酒窝.13 小时前
【多线程】多线程打印ABC
java
乡野码圣13 小时前
【RK3588 Android12】RCU机制
java·jvm·数据库
JAVA+C语言13 小时前
如何优化 Java 多主机通信的性能?
java·开发语言·php
编程彩机15 小时前
互联网大厂Java面试:从分布式架构到大数据场景解析
java·大数据·微服务·spark·kafka·分布式事务·分布式架构
小酒窝.15 小时前
【多线程】多线程打印1~100
java·多线程
君爱学习15 小时前
基于SpringBoot的选课调查系统
java
APIshop15 小时前
Java 实战:调用 item_search_tmall 按关键词搜索天猫商品
java·开发语言·数据库