Java数据敏感词转换成符号
在某个论坛下用户可以随意留言,为了防止不法分子在网上任意冲浪,需要对一些敏感词汇进行一些校验。在这里使用一个高性能敏感词工具sensitive-word。
详细网址:https://github.com/houbb/sensitive-word?tab=readme-ov-file
maven
<!-- 数据脱敏 -->
<dependency>
<groupId>com.github.houbb</groupId>
<artifactId>sensitive-word</artifactId>
<version>0.13.1</version>
</dependency>
直接使用
String str1 = "我他妈的没有说过脏话";
String replace1 = SensitiveWordHelper.replace(str1);
System.out.println("原始数据:" + str1);
System.out.println("脱敏数据:" + replace1);
// 原始数据:我他妈的没有说过脏话
// 脱敏数据:我***没有说过脏话
结合Spring使用
拓展已脱敏词汇
@Component
public class MyWordDeny implements IWordDeny {
@Override
public List<String> deny() {
return Arrays.asList("卢本伟没有开挂","我的发");
}
}
拓展排除脱敏词汇
@Component
public class MyWordAllow implements IWordAllow {
@Override
public List<String> allow() {
return Arrays.asList("废物","辣鸡");
}
}
配置类
@Configuration
public class SpringSensitiveWordConfig {
/**
* 排除敏感词
*/
@Resource
private MyWordAllow myWordAllow;
/**
* 拓展敏感词
*/
@Resource
private MyWordDeny myWordDeny;
/**
* 初始化引导类
* WordAllows.chains 在原作者词汇数据库进行拓展
* WordDenys.chains 同上
*/
@Bean
public SensitiveWordBs sensitiveWordBs() {
return SensitiveWordBs.newInstance()
.wordAllow(WordAllows.chains(WordAllows.defaults(), myWordAllow))
.wordDeny(WordDenys.chains(WordDenys.defaults(), myWordDeny))
.init();
}
}
测试调用
@SpringBootTest(classes = QpikerAdminApplication.class)
@RunWith(SpringRunner.class)
public class SensitiveTest {
/**
* 数据脱敏
*/
@Resource
private SpringSensitiveWordConfig springSensitiveWordConfig;
@Test
public void wordSensitive(){
String str = "谁他妈的是废物?,我卢本伟没有开挂真的,1824176666,我的发你是小辣鸡";
System.out.println("原始数据:" + str);
String replace = springSensitiveWordConfig.sensitiveWordBs().replace(str);
System.out.println("脱敏数据:" + replace);
}
}
输出结果
原始数据:谁他妈的是废物?,我卢本伟没有开挂真的,18241766666,他妈的,我的发你是小辣鸡
脱敏数据:谁***是废物?,我*******真的,***********,***,***你是小辣鸡
'废物' 被加到排除脱敏数据中,结果没被替换
'卢本伟没有开挂' 被加到已脱敏数据中,结果被替换
真没有意说脏话,希望各大网友们构建一个文明网络世界。