返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >.Net集成敏感词组件的步骤
  • 588
分享到

.Net集成敏感词组件的步骤

2024-04-02 19:04:59 588人浏览 薄情痞子
摘要

目录ToolGood.WordsValidationAttribute敏感词热重载效果结语ToolGood.Words 首先我们要使用的开源组件是 ToolGood.Words

ToolGood.Words

首先我们要使用的开源组件是 ToolGood.Words

通过简单的了解,我们可以知道它可以针对敏感词及其拼音、跳词等变形进行检测,在实际的应用场景中能满足大部分的需求。
具体的用法在这里不做过多的介绍,接下来我们需要做的事情是如何在现有代码中快速且方便的情况下接入敏感词组件。很显然,如果我们按照组件写的示例去操作,会发现需要在现有的代码中进行大量重构的操作,这显然会累垮 VS 。熟悉水弟的朋友首先就会想到使用 aop 的方式去优化处理。

ValidationAttribute

我们先定义两个简单的模型来绑定输入参数,一个是只要输入含有敏感词就会报错,一个是只要输入含有敏感词就会把相关的字符串替换为 * ,代码如下:


    public class MinganCheckInput
    {
        [MinGanCheck]
        public string Text { get; set; }
    }
    
    public class MinganReplaceInput
    {
        [MinGanReplace]
        public string Text { get; set; }
    }

其中 [MinGanCheck] 和 [MinGanReplace] 是我们定义的特性标记,将其继承 ValidationAttribute,就和我们常用的 [Required] 一样方便,哪里敏感点哪里。


  /// <summary>
    /// 敏感词检查的特性,一匹配就抛异常
    /// </summary>
    [AttributeUsage(AttributeTargets.Property)]
    public class MinGanCheck : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            throw  new NotImplementedException();
        }
    }

    /// <summary>
    /// 敏感词替换
    /// </summary>
    [AttributeUsage(AttributeTargets.Property)]
    public class MinGanReplace : ValidationAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            return ValidationResult.Success;
        }
    }

接下来就是实现 ValidationAttribute 的功能,如果看过水弟写过的 aop 文章,这时候就不会直接在校验的方法中直接引入 ToolGood.Words ,这样会带来很大的耦合,也不便于我们替换为其他的敏感词组件或服务。所以我们只要再多一层抽象就可以了。


       // 检查
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            return validationContext.GetService<IMinGanCheckValidator>().IsValid(value, validationContext);
        }
        // 替换
        protected override ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            validationContext.GetService<IMinGanReplaceValidator>().IsValid(value, validationContext);
            return ValidationResult.Success;
        }

接着我们分别实现 IMinGanCheckValidator 和 IMinGanReplaceValidator 的功能,也即检查和替换功能。


// 检查
   public class MinGanCheckValidator : IMinGanCheckValidator
    {
        public ValidationResult IsValid(object value, ValidationContext validationContext)
        {
            if (value is string v)
            {
                if (!String.IsNullOrEmpty(v))
                {
                   // 文字检查
                    if (MinGanProvider.Instance.IllegalWordsSearch.ContainsAny(v))
                    {
                        return new ValidationResult("存在敏感词", new[] { validationContext.MemberName });
                    }
                    // 检查拼音
                    if (MinGanProvider.Instance.IllegalWordsSearch.ContainsAny(WordsHelper.GetPinyin(v)))
                    {
                        return new ValidationResult("存在敏感词",new []{ validationContext.MemberName });
                    }
                    // todo:其他变种
                }
            }
            return ValidationResult.Success;
        }
    }

//替换
 public class MinGanReplaceValidator : IMinGanReplaceValidator
    {
        public void Replace(object value, ValidationContext validationContext)
        {
            if (value is string v)
            {
                if (!String.IsNullOrEmpty(v))
                {
                    v = MinGanProvider.Instance.IllegalWordsSearch.Replace(v);
                    SetPropertyByName(validationContext.ObjectInstance,validationContext.MemberName, v);
                }
            }
        }
        
        static bool SetPropertyByName(Object obj, string name, Object value)
        {
            var type = obj.GetType();
            var prop = type.GetProperty(name, BindingFlags.Public | BindingFlags.Instance);
            if (null == prop || !prop.CanWrite) return false;
            prop.SetValue(obj, value, null);
            return true;
        }
    }

其中 MinGanProvider.Instance.IllegalWordsSearch 是 ToolGood.Words 中的检测类单例,这里不详细展开。这样我们就有一个大概能用的敏感词检测组件了,然而在实际过程中,我们还需要对敏感词进行管理,特别是需要实时更新敏感词。

敏感词热重载

JSON 配置文件存放敏感词为例,只需要配置热重载就行了。
首先是 Program.cs 文件中让 json 配置文件热重载。


          public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration((builderContext, config) =>
                {
                    config.AddJsonFile("IllegalKeywords.json", optional: false, reloadOnChange: true);// 配置可热重载
                })
                .ConfigureWEBHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });

最后是在 Startup.cs 中文件处理重载事件。


           ChangeToken.OnChange(() => Configuration.GetReloadToken(), () =>
            {
                // 敏感词重载
            var keys= Configuration.GetSection("IllegalKeywords").Get<List<string>>();
            if (keys!=null&&keys.Any())
            {
                var allKeys = new List<string>();
                foreach (var k in keys)
                {
                    allKeys.Add(k); // 增加词汇
                    allKeys.Add(WordsHelper.ToTraditionalChinese(k)); // 增加繁体
                    allKeys.Add(WordsHelper.GetPinyin(k)); // 增加拼音
                }
                IllegalWordsSearch.SeTKEywords(allKeys);
            }
            });

效果

结语

看到这里,可能有些人已经骂骂咧咧退出网站,说好的两分钟,光是看文章和复制代码都需要十几分钟。所以为了满足伸手党的需求,我写了一个简单的示例,只要把对应文件和代码复制到代码就可以使用了,真的不超过2分钟就能实现敏感词检测。
项目地址:https://GitHub.com/jonechenug/ToolGood.Words.Sample

以上就是.net集成敏感词组件的步骤的详细内容,更多关于.Net集成敏感词组件的资料请关注编程网其它相关文章!

--结束END--

本文标题: .Net集成敏感词组件的步骤

本文链接: https://lsjlt.com/news/125867.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • .Net集成敏感词组件的步骤
    目录ToolGood.WordsValidationAttribute敏感词热重载效果结语ToolGood.Words 首先我们要使用的开源组件是 ToolGood.Words ...
    99+
    2024-04-02
  • .Net中集成敏感词组件的操作步骤
    小编给大家分享一下.Net中集成敏感词组件的操作步骤,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!ToolGood.Words首先我们要使用的开源组件是 Tool...
    99+
    2023-06-15
  • .Net Core 集成 Kafka的步骤
    目录kafkabrokertopicpartitionconsumer group安装kafka.net 操作 kafka生产者消费者运行一下总结最近维护的一个系统并发有点高,所以想...
    99+
    2024-04-02
  • vue实现检测敏感词过滤组件的多种思路
    目录写在前面需求分析v1思路一:使用截流方法监听输入框的input事件思路二:使用输入框的失焦和保存按钮的点击事件思路三:使用mixins抽取敏感词检测方法思路四:使用promise...
    99+
    2024-04-02
  • SpringBoot集成Jasypt敏感信息加密的操作方法
    目录前言哪些信息需要加密敏感信息加密的作用选择加密的组件项目集成Jasypt方式方式一方式二方式三Springboot整合Jasypt实战一、引入依赖二、配置文件中添加Jasypt配...
    99+
    2024-04-02
  • SpringBoot集成EasyExcel的步骤
    目录一 、EasyExcel简介二、常用注解 三、依赖四、监听五、接口导入Excel六、接口 导出Excel (HttpServletResponse response, HttpS...
    99+
    2024-04-02
  • springboot集成apidoc的步骤
    本篇内容主要讲解“springboot集成apidoc的步骤”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“springboot集成apidoc的步骤”吧!一、apidoc简介apidoc通过在你...
    99+
    2023-06-19
  • openinstall 的Android集成步骤
    openinstall的作用:        登入openinstall官网,没有账号就注册个没有应用就添加一个应用(选择高级版)        下载导入sdk...
    99+
    2023-06-04
  • springboot 集成dubbo的步骤详解
    目录第一步 搭建zookeeper环境第二步 springboot集成dubbo1.项目目录机构2.代码编写2.1 api目录2.2 consumer目录 web访问、接口调用以及d...
    99+
    2024-04-02
  • springboot集成mybatisplus的详细步骤
    目录Mybatis-Plus介绍简介特性(官网提供)一、引入POM依赖二、配置文件application.yml三、编写表映射实体类四、编写Mapper五、测试Controller六...
    99+
    2022-11-13
    springboot集成mybatisplus springboot mybatisplus
  • 用.NET生成数据库的方法步骤
    本篇内容介绍了“用.NET生成数据库的方法步骤”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开篇语本文主要...
    99+
    2024-04-02
  • SpringBoot Admin2.0 集成Arthas的实现步骤
    目录技术选型相关 整体结构实现效果 改造方案1. 整体工程结构2. 外部链接配置 3. 对应 Spring MVC controller 实现 4. Arthas Spring Bo...
    99+
    2024-04-02
  • SpringBoot Admin2.0集成Arthas的实现步骤
    小编给大家分享一下SpringBoot Admin2.0集成Arthas的实现步骤,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!项目最初使用 Arthas 主要有...
    99+
    2023-06-14
  • SpringBoot2.x 集成 Thymeleaf的详细步骤
    这篇文章主要介绍“SpringBoot2.x 集成 Thymeleaf的详细步骤”,在日常操作中,相信很多人在SpringBoot2.x 集成 Thymeleaf的详细步骤问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对...
    99+
    2023-06-20
  • spring集成mybatis的步骤是什么
    集成Spring和MyBatis的步骤如下:1. 引入相关依赖:在项目的pom.xml文件中添加Spring和MyBatis的依赖。...
    99+
    2023-10-18
    spring mybatis
  • ASP.NET Core 集成 React SPA应用的步骤
    目录wwwroot\uiReactUIMiddleware运行一下总结AgileConfig的UI使用react重写快完成了。上次搞定了基于jwt的登录模式(AntDesign Pr...
    99+
    2024-04-02
  • SpringBoot集成Caffeine缓存的实现步骤
    目录Maven依赖 配置 示例 Maven依赖 要开始使用咖啡因Caffeine和Spring Boot,我们首先添加spring-boot-starter-cache和咖啡因Ca...
    99+
    2024-04-02
  • IDEA集成Gitee码云的实现步骤
    目录码云帐号注册和登录 码云创建远程库IDEA 集成码云 IDEA 连接码云将本地代码 push 到码云远程库pull 拉取远程库到本地库clone 克隆远程库到本地码云复制 Git...
    99+
    2024-04-02
  • SpringBoot项目集成FTP的方法步骤
    目录写在前面FTP相关软件安装开始集成引入相关jar包引入FTPUtils.java和FTPHelper.java如何使用写在前面 FTP是一个文件传输协议,被开发人员广泛用于在互...
    99+
    2024-04-02
  • Android集成微信登录的步骤详解
    一、首先在Application的onCreate中写: // GeneralAppliction.java public static IWXAPI sApi; @Ove...
    99+
    2022-06-06
    Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作