开发中遇到的问题&解决方案(十)

简介: 我们在开发中一般遇到会对于敏感词的过滤或者屏蔽,因为之前做过社区类的APP,在这方面也踩了不少的坑,算是也积累了一点点的经验,那么今天我们来看看hutool里对于敏感词的一些操作,工具类SensitiveUtil()

微信截图_20220531133417.png

前言

我们在开发中一般遇到会对于敏感词的过滤或者屏蔽,因为之前做过社区类的APP,在这方面也踩了不少的坑,算是也积累了一点点的经验,那么今天我们来看看hutool里对于敏感词的一些操作,工具类SensitiveUtil()

一.怎么用

  1. 自定义敏感词,形成敏感树
  2. 初始化敏感树,有异步懒加载
  3. 寻找敏感树,核心密集匹配原则和贪婪匹配(最长匹配)
  4. 可以将敏感词列表的接口包装成接口,自由的添加和删除敏感词,像分词一样的操作

二.初始化敏感树

//sensitiveWords 敏感词列表,可以自定义 
//isAsync 是否异步化 类似于懒加载 可以选择的懒加载
public static void init(final Collection<String> sensitiveWords, boolean isAsync) {
   if (isAsync) {
      ThreadUtil.execAsync(() -> {
      // 初始化敏感树
         init(sensitiveWords);
         return true;
      });
   } else {
      init(sensitiveWords);
   }
}
复制代码

三.寻找敏感树代码

//检测文本
 //isDensityMatch 是否使用密集匹配原则
 //isGreedMatch   是否使用贪婪匹配(最长匹配)原则
public static List<FoundWord> getFoundAllSensitive(String text, boolean isDensityMatch, boolean isGreedMatch) {
 //这里跟正则表达式很类似
   return sensitiveTree.matchAllWords(text, -1, isDensityMatch, isGreedMatch);
}
复制代码

四.敏感词过滤,被过滤的文本一般会被转成json,为什么转成json呢,这个问题相信很多小伙伴都知道,json处理起来很灵活,在很多第三方接口里json是最常用的

public static <T> T sensitiveFilter(T bean, boolean isGreedMatch, SensitiveProcessor sensitiveProcessor) {
   String jsonText = JSONUtil.toJsonStr(bean);
   @SuppressWarnings("unchecked")
   final Class<T> c = (Class<T>) bean.getClass();
   //递归查找 
   return JSONUtil.toBean(sensitiveFilter(jsonText, isGreedMatch, sensitiveProcessor), c);
}
复制代码

五.最后再看看Spring里的过滤器运行原理,监听器全程像摄像头一样监听各种'动作',触发事件,一个正常的请求过来一般是先经过过滤器,Filter,至于要怎么过滤,可以自己定义,然后就是拦截器,一般拦截一些非法请求或者错误请求,简单的画了一个图

微信截图_20220531142055.png

小结 过滤在系统里其实也很重要,一些敏感词必须过滤,不然对网站或者系统有一些影响,也算是一个小知识点吧。

目录
相关文章
|
Java Spring
解决方案 --[restartedMain] o.s.b.d.LoggingFailureAnalysisReporter :
Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled. ERROR 9680 --- [ restartedMain] o.s.b.d.LoggingFailureAnalysisReporter
开发中遇到的问题&解决方案(四)
今天继续hutool工具类的认识,废话不多说下面直接进入主题。
320 0
开发中遇到的问题&解决方案(四)
|
设计模式 前端开发 Java
开发中遇到的问题&解决方案(一)
在开发过程在我们往往会遇到很多的开发阻碍或者因为原生框架的不支持导致的一系列问题或者有的不是问题,是我们使用普通的大量的复制粘贴改改就能用的代码去实现功能,这样使得代码很冗余,我们能不能去尝试找一些好的方案比如采用设计模式这些去优化我们的代码,实现代码简洁明了,易扩展呢?答案是肯定的。这个系列文章会使用案列加解决方案的形式为大家讲解,那下面我们开始吧。
760 0
开发中遇到的问题&解决方案(一)
|
Java 数据库 微服务
开发中遇到的问题&解决方案(三)
我们在日常的开发中会使用到很多工具类,比如最常用的Http请求的,或者日期工具类,处理时间差或者对日期进行特殊处理的,还有就是图片上传类的,比如阿里云或者腾讯云得SSO图片上传,以及Excel文件的导入导出。那这些工具类基本上都是跟着项目的,就是每个项目都写各自的工具类,如果分工明确细化到小组那重复代码就多了,那把工具类集成成一个项目类呢,由一个人去维护这个工具类工程,如果是微服务项目就是一个工具类的微服务,这样做的好处就很明显了,至少公司的研发部在使用到常用的工具类时不必再去网上找到。
329 0
开发中遇到的问题&解决方案(三)
|
Java
开发中遇到的问题&解决方案(八)
以前的一个老项目里使用过ZXing进行会员和门店二维码的生成操作,当时出现过Java版本升级后不兼容的问题,很是麻烦,于是替换成了hutool里的二维码生成,下面我们来看看具体的实现。
206 0
开发中遇到的问题&解决方案(八)
|
Java Linux 数据安全/隐私保护
开发中遇到的问题&解决方案(六)
之前的项目里有用到FTP,需要使用FTP把图片及一些必要文件上传到第三方的FTP服务器上,所以会涉及FTP连接,创建用户,创建文件夹,文件上传等,项目里选用的还是hutool包装的FTP工具类,下面来看看这些功能的在hutool里是怎么包装的。
547 0
开发中遇到的问题&解决方案(六)
|
网络协议 数据安全/隐私保护
开发中遇到的问题&解决方案(七)
邮件发送相信大家都不陌生吧,一般是用于电商平台比如京东下单后订单信息的邮件发送或者移动这种的月度账单的邮件发送,再有就是通过绑定的邮箱进行密码重置,由邮箱跳转到指定的密码重置页进行密码重置操作。那么下面我们来看看hutool里对于邮件发送的包装是怎么样的。
209 0
开发中遇到的问题&解决方案(七)
|
SQL NoSQL Oracle
开发中遇到的问题&解决方案(二)
一个软件系统最重要的是什么?毫无疑问是数据,那什么是数据的&#39;运载体&#39;,什么作为后端与数据库的桥梁和沟通者呢,是SQL。我是Java开发出身,大学课程当时学习的是SQL Server,而且后面工作中实际用到过Oracle,DB2以及使用的最普遍的My SQL,至于No SQL 这一类下的常用的就是Redis和MongoDB了,这些后面再详细举例说明。今天讲的案列与表情相关,那么接下来进入今天的主题。
176 0
开发中遇到的问题&解决方案(二)
|
数据安全/隐私保护
开发中遇到的问题&解决方案(五)
在开发过程中,图片是必不可少的,除了图片的上传下载以外,图片压缩也是很常见的。 下面我们来看看hutool工具类里图片压缩的方法。
382 0
开发中遇到的问题&解决方案(五)
|
安全 机器人 数据安全/隐私保护
开发中遇到的问题&解决方案(九)
在我们的系统里验证码是必不可少的,比如注册登录时,忘记密码时,设置支付密码时或者支付下单时,那验证码的作用在哪里呢?其实就一条为了防止来着黑客和机器人恶意的攻击,那么下面我们来看看hutool里验证码工具类。
273 0
开发中遇到的问题&解决方案(九)