目录
场景:用户评论的时候 会让他输入文字 这个时候 就要敏感词判定一下
效果展示:
swagger展示
实现原理
hutool工具包实现
cn.hutool.dfa
Class SensitiveUtil
- java.lang.Object
- cn.hutool.dfa.SensitiveUtil
init
public static void init(Collection<String> sensitiveWords)初始化敏感词树
Parameters:
sensitiveWords
- 敏感词列表containsSensitive
public static boolean containsSensitive(Object obj)是否包含敏感词
Parameters:
obj
- bean,会被转为JSON字符串Returns:
是否包含
会用到以上俩个方法
jar包导入:
要最新的自己去找就可以了
<!--hutool工具类 --> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.6</version> </dependency><!--参数校验 -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.0.1.Final</version>
</dependency>
<dependency>
<groupId>org.glassfish</groupId>
<artifactId>jakarta.el</artifactId>
<version>3.0.3</version>
</dependency>
上代码
第一步:初始化敏感词
可以以读取文件的形式
/**
* @Description 敏感词初始化加载
* @Author 小乌龟
* @Date 2022/5/21 14:20
*/
@Configuration
@Slf4j
public class SensitiveWordConfig implements InitializingBean {
@Autowired
private WebAppDataProperties webAppDataProperties;
@Override
public void afterPropertiesSet(){
//自己对应的文件路径 存放地址
File file = FileUtil.file(webAppDataProperties.getMappingLocation()+"sensitiveWord.txt");
FileReader reader = new FileReader(file);
SensitiveUtil.init(reader.readLines());
log.info("initialize bean:{}", SensitiveWordConfig.class.getName());
}
}
温馨提示:
第二步:
注解:
IsSensitiveWord
/**
* @author 小乌龟 敏感词判定 string
*/
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@NotBlank(message = "内容不可为空")
@Constraint(validatedBy = {IsSensitiveWordValidation.class})
public @interface IsSensitiveWord {
String message() default "含有敏感词不可提交";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
IsSensitiveWordValidation
/**
* @Description 敏感词验证
* @Author 小乌龟
* @Date 2022/5/22 14:02
*/
public class IsSensitiveWordValidation implements ConstraintValidator<IsSensitiveWord, String> {
@Override
public void initialize(IsSensitiveWord constraintAnnotation) {
ConstraintValidator.super.initialize(constraintAnnotation);
}
@Override
public boolean isValid(String content, ConstraintValidatorContext constraintValidatorContext) {
//hutool 敏感词查询 是否包含敏感词
return !SensitiveUtil.containsSensitive(content);
}
}