动态可定义数据脱敏的方案

本文介绍了一种动态定义数据脱敏的思路,适用于特殊环境,如区域医疗集成平台和健康门户VIP平台。现有方案包括基于注解和前端脱敏,但各有局限。提出的方案无需重启即可更新脱敏字段,通过维护脱敏表并利用观察者模式实时更新HashMap,结合反射和拦截器实现高效脱敏。
摘要由CSDN通过智能技术生成

动态脱敏的一种思路

引言

​ 本文只是记录一种动态定义脱敏字段的解决方法。
​ 本人是一个Java实习生,本方法只针对特殊环境进行使用。
​ 此方法已运用与某区域医疗集成平台以及某健康门户Vip平台

​ 注:此方法不适合大并发项目。

现有方案

  • 基于注解

    • GitHub链接

      优点:方便 缺点:无法不重启修改需要脱敏的字段,不符合需求

  • 前端脱敏

    优点:无需技巧

    缺点:稍微懂一点计算机的,看一下浏览器控制台就拿到数据了。一般不可取

思路

  • 无需重启即可更新字段

    • 解决方案
      • 写在独立的配置文件

      • 独立维护一个表(脱敏表),存储脱敏规则,定期读取更新或者触发式读取更新

        此处独立选择维护一个脱敏表。

        项目启动时,将需要脱敏的表,字段以及字段对应的规则全部读取存入Hash Map 中。

        对外暴露一个新增和更新接口,触发新增或者更新接口时,通知工具类对Hash Map进行更新。(观察者模式)

        下为规则更新的伪代码。仅展示单个表的方法,多表则修改Hash Map的存储类型即可

      public class DesensitiseUtil{
             
          /**
      	* Long为角色id,List<String>规则存储方法
      	*/
      	static HashMap<Long, List<String>> desensitiseMap = new HashMap<>();
      
      	/**
          * 观察者模式,插入新的规则或者更新规则触发
          */
          public static void update() {
             
              // 读取数据库
              // 根据Key更新对应的 Hash Map的值
          }
      }
      
      

      ​ 下为外暴接口,提供给Controller层调用

      @Service
      public class DesensitiseServiceImpl implements DesensitiseService {
             
          @Override
          public int insertOrUpdateRule(Dto dto){
             
              // 插入或者更新
              // 根据dto的输入更新脱敏规则表
              // 调用DesensitiseUtil的更新接口
              DesensitiseUtil.update();
              // 返回插入或者更新影响行数
      	}
      }
      
  • 脱敏方法

    • 解决方案
      • 通过反射进行脱敏
      public class DesensitiseUtil {
             
      	/**
          * 对任意类型的属性进行
          *
          * @param result    查询结果
          * @param fieldName 需要脱敏的属性
          */
          public static <T> void desensitise(T result, String fieldName) {
             
              Field field = ReflectionUtils.findField(result.getClass(), fieldName);
              if (field != null) {
             
                  field.setAccessible(true);
                  switch (fieldName) {
             
                      case "mobile": {
             
                          Reflectio
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值