# 《高性能脱敏组件》脱敏设计-第01节:注解、接口与顶层抽象类的设计与实现

作者:冰河
星球:http://m6z.cn/6aeFbs (opens new window)
博客:https://binghe.gitcode.host (opens new window)
文章汇总:https://binghe.gitcode.host/md/all/all.html (opens new window)
源码获取地址:https://t.zsxq.com/0dhvFs5oR (opens new window)

沉淀,成长,突破,帮助他人,成就自我。

  • 本章难度:★★☆☆☆
  • 本章重点:对高性能脱敏组件的注解、接口与顶层抽象类进行设计与实现,从全局角度掌握高性能脱敏组件通用注解、接口与顶层抽象类的设计思想。重点掌握通用中间件项目的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

大家好,我是冰河~~

截止到目前,我们已经明确了高性能脱敏组件的需求和流程,并且对高性能脱敏组件的方案目标和总体架构设计进行了总体介绍。并且对如何将高性能脱敏组件通用化落地进行了简单的说明。接下来,我们就正式设计和实现高性能脱敏组件。

# 一、前言

在需求设计篇章,我们梳理了为何学习高性能脱敏组件,阐述了高性能脱敏组件的目标与挑战,对设计高性能脱敏组件面对的挑战给出了详细的应对方案,并且从功能性需求和非功能性需求等方面详细梳理了高性能脱敏组件的需求。

在架构设计篇章,详细阐述了高性能脱敏组件的方案目标、技术选型和总体架构设计。并且对高性能脱敏组件的通用化落地方案进行了简单的说明。

至此,准备工作已全部完成,接下来,就要真正从编码角度设计和实现高性能脱敏组件了。

# 二、本节诉求

对高性能脱敏组件的注解、接口与顶层抽象类进行设计与实现,从全局角度掌握高性能脱敏组件通用注解、接口与顶层抽象类的设计思想。重点掌握通用中间件项目的设计思路和设计方法,并能够将其灵活应用到自身实际项目中。

# 三、核心类设计

注意:本节只给大家展示高性能脱敏组件注解、接口与顶层抽象类的核心类实现关系,其他代码的实现细节,大家可以自行到本节对应的源码分支进行查看,这里不再赘述。

高性能脱敏组件的注解、接口与顶层抽象类的核心类设计如图1-1所示。


可以看到,在设计高性能脱敏组件时,@ShieldClass和@ShieldField为高性能脱敏组件的注解,并且@ShieldFiled注解依赖SheldMethodEnum枚举。同时定义了高性能组件的脱敏接口为Shield,顶层脱敏抽象类为AbstractShield。具体说明如下:

(1)Shield接口

高性能脱敏组件的核心脱敏接口,主要定义了如下常量和方法。

  • SHIELD_CHAR常量:数据脱敏后显示的字符。
  • sensitive()方法:核心脱敏方法,传入待脱敏的数据和脱敏的规则条件即可对数据进行脱敏。其中,脱敏规则条件是一个字符串类型的数组,包含三个元素,addition[0]表示脱敏后字符串开头部分保留多少个原始字符,addition[1]表示脱敏后字符串结尾部分保留多少个原始字符,addition[2]表示脱敏后字符串中间部分使用多少个*替换原始字符。
  • isClean()方法:是否将整个数据清空,也就是完全不展示数据,true:完整不展示数据;false:展示脱敏后的数据。

(2)AbstractShield抽象类

高性能脱敏组件的顶层抽象类,主要实现了Shield接口,并实现和定义了如下方法。

  • sensitive()方法:实现Shield接口中的sensitive()方法,对sensitive()方法的实现逻辑进行通用化处理。当传递的fieldValue值为null,则调用handleNull()方法并返回结果。当传递的fieldValue值为空字符串,则调用handleEmpty()方法并返回结果。当fieldValue即不为null,也不是空字符串,则会在sensitive()方法中调用定义的doSensitive()抽象方法。
  • isClean():是否将整个数据清空,也就是完全不展示数据,true:完整不展示数据;false:展示脱敏后的数据。这里,返回默认值false。
  • handleNull()方法:直接返回null。
  • handleEmpty()方法:直接返回空字符串。
  • doSensitive()方法:抽象方法,真正执行脱敏逻辑,交由子类实现。

(3)ShieldMethodEnum枚举

# 查看完整文章

加入冰河技术 (opens new window)知识星球,解锁完整技术文章、小册、视频与完整代码