springboot整合sensitive-word敏感词监测,实现数据库自定义敏感词,敏感词白名单

前提说明:
本文描述可能存在问题,如果不理解私信或者问下评论,看到就解答。
文中因为测试需要用到脏话,可能会被和谐,大家发挥自己的想象力去自动处理被和谐部分。[手动狗头]

一.数据库设置

  1. 新创建两个表(敏感词设置,白名单)
CREATE TABLE `word_deny`  (
  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'id',
  `ignore_case` tinyint(0) NULL DEFAULT NULL COMMENT '是否忽略大小写',
  `ignore_width` tinyint(0) NULL DEFAULT NULL COMMENT '是否忽略全角、半角',
  `ignore_num_style` tinyint(0) NULL DEFAULT NULL COMMENT '是否忽略数字样式',
  `ignore_chinese_style` tinyint(0) NULL DEFAULT NULL COMMENT '是否忽略中文样式',
  `ignore_english_style` tinyint(0) NULL DEFAULT NULL COMMENT '是否忽略英文样式',
  `ignore_repeat` tinyint(0) NULL DEFAULT NULL COMMENT '是否忽略重复',
  `word_deny` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '敏感词内容',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  `default_deny` tinyint(0) NOT NULL DEFAULT 1 COMMENT '是否默认敏感词配置',
  `default_allow` tinyint(0) NOT NULL DEFAULT 1 COMMENT '是否默认敏感词白名单配置',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '敏感词设置' ROW_FORMAT = Dynamic;
CREATE TABLE `word_allow`  (
  `id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL COMMENT 'id',
  `word_allow` text CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL COMMENT '白名单词',
  `create_time` datetime(0) NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间',
  `update_time` timestamp(0) NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '敏感词白名单' ROW_FORMAT = Dynamic;

备注:敏感词配置只能存在一条数据。注意在配置的时候不能重复新增。

二.情况分析

针对上述数据库配置,一共会出现四种情况。

  1. 数据库没有设置敏感词和白名单或者设置了,也是设置的都是使用默认值(全是用默认值)
  2. 数据库设置了自定义敏感词和自定义白名单(全是自定义)
  3. 数据库设置默认的敏感词和自定义白名单(敏感词:默认;白名单:自定义)
  4. 数据库设置自定义的敏感词和默认白名单(敏感词:自定义;白名单:默认)

三.情况演示(控制台输入)

接口展示

	private final SensitiveWordBs sensitiveWordBs;
    private final WordDenyService wordDenyService;
    private final WordAllowService wordAllowService;
    
	@PostMapping
    public Res word(@RequestBody WordVo wordVo) {
   
        String res = "";
        String allowRes = "数据库中白名单为空";
        WordDeny wordDeny = wordDenyService.getOne(Wrappers.emptyWrapper());//配置
        List<WordAllow> wordAllowList = wordAllowService.list(Wrappers.emptyWrapper());//白名单
        if (wordAllowList != null && wordAllowList.size() > 0) {
   
            allowRes = wordAllowList.toString();
        }
        if (wordDeny == null) {
   
            res = "数据库没有配置敏感词,使用默认的敏感词和白名单";
        } else {
   
            res = "数据库【" + (wordDeny.getDefaultDeny() ? "开启默认敏感词" : "【开启自定义敏感词】,自定义值:" + wordDeny.getWordDeny()) + "】,"
                    + (wordDeny.getDefaultAllow() ? "【开启默认白名单】" : "【开启自定义白名单】,自定义值:" + allowRes);
        }
        String word = wordVo.getWord();
        System.out.println("\33[36;1m该请求的设置:\033[0m" + res);
        System.out.println("\33[36;1m请求中被检测的字符串:\033[0m" + word);
        System.out.println("\33[36;1m字符串中是否包含铭感词:\033[0m" + (sensitiveWordBs.contains(word) ? "【包含】" : "【不包含】"));
        System.out.println("\33[36;1m查找所有铭感词:\033[0m" + sensitiveWordBs.findAll(word));
        System.out.println
springboot整合敏感词可以通过配置和自定义过滤器来实现。首先,需要在配置文件中设置敏感词处理方式。例如,在`application.properties`文件中,可以使用`sensitiveWord.dealMethod`配置项来指定处理方式,默认不处理敏感词可以设置为null。 接下来,在配置类中使用`@Bean`注解来创建一个过滤器的实例。可以使用`FilterRegistrationBean`来注册过滤器,并在构造函数中传入敏感词处理方式。例如,可以创建一个`SensitiveWordFilter`过滤器实例,并将敏感词处理方式作为参数传入。然后,将过滤器实例添加到`FilterRegistrationBean`中,并返回该实例。 这样,当应用启动时,过滤器就会自动注册,并根据配置的敏感词处理方式进行相应的处理。例如,如果配置为替换敏感字符的方式(1),则过滤器会将敏感词替换为指定的字符;如果配置为包含敏感字符禁止提交的方式(2),则过滤器会禁止提交包含敏感词的内容。如果未配置处理方式,则过滤器不会对敏感词进行处理。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [SpringBoot2.2.6 整合Jwt实现前后端分离](https://download.csdn.net/download/lianghecai52171314/12352790)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [spring boot 统一处理敏感词](https://blog.csdn.net/fengxing_2/article/details/109182394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XuDream

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值