springboot 敏感词判定注解
场景:用户评论的时候 会让他输入文字 这个时候 就要敏感词判定一下
效果展示:
swagger展示
实现原理
hutool工具包实现
cn.hutool.dfa Class SensitiveUtil cn.hutool.dfa.SensitiveUtil
init public static void init(<> sensitiveWords) 初始化敏感词树 Parameters: sensitiveWords - 敏感词列表 containsSensitive public static boolean containsSensitive( 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); } }
下一篇:
【良品】运维实施工程师面试题