自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏

首先说到脱敏问题,我相信在座的很多人都需要处理这样的场景,比如前端页面显示的身份证号、地址等敏感信息都需要脱敏处理,而hutool就有这样的一个工具来辅助我们完成对某些字段属性信息的脱敏,hutool没有现成的实现方式,只是借助这个工具帮助我们来具体实现

前言

我们在使用手机银行的时候经常能看到APP上会将银行卡的卡号中间部分给隐藏掉使用 ***** 来代替,在某些网站上查看一些业务密码时(例如签到密码等)也会使用 ***** 来隐藏掉真正的密码,那么这种方式是如何实现的呢?

我们这篇文章的实现思路就基于Hutool来实现,在Hutool中提供了一个名为 DesensitizedUtil 的工具类,我们使用这个工具类来加密。

首先我们先来看一下这个类里的具体实现,如下:

在这里插入图片描述
我们可以看到映入眼帘的除了一个无参构造之外就是一个名为 desensitized 的方法,这个方法就是我们加密的主要方法,里面利用了 switch…case 方法来区分不同的加密方法。我们可以来写一个单元测试来测试一下通过这个方法加密后是什么样的

在这里插入图片描述
以上为加密后的信息,里面我使用了不同的类型来进行加密,目前最新版的Hutool支持脱敏加密的类型如下

  • 用户ID
  • 中文名
  • 密码
  • 地址
  • 邮箱
  • 座机号
  • 手机号
  • 中国大陆的车牌号
  • 银行卡号
  • IPv4地址
  • IPv6地址
  • 自定义脱敏

具体实现demo

通过以上的示例我们就可以开始编写我们自己的脱敏操作了,首先我们要先根据以上Hutool中提供的脱敏类型来编写我们自己的类型**(如嫌麻烦也可省略此步骤,直接使用DesensitizedUtil中的DesensitizedType)**

编写数据脱敏类型

/**
 * @author Bummon
 * @description 数据脱敏策略
 * @date 2023-09-01 17:43
 */
public enum DataMaskingType {

    /**
     * 用户ID
     */
    USER_ID,
    /**
     * 中文名
     */
    CHINESE_NAME,
    /**
     * 身份证号
     */
    ID_CARD,
    /**
     * 座机
     */
    FIXED_PHONE,
    /**
     * 手机号
     */
    MOBILE_PHONE,
    /**
     * 地址
     */
    ADDRESS,
    /**
     * 邮箱
     */
    EMAIL,
    /**
     * 密码
     */
    PASSWORD,
    /**
     * 中国大陆车牌号
     */
    CAR_LICENSE,
    /**
     * 银行卡号
     */
    BANK_CARD,
    /**
     * IPv4地址
     */
    IPV4,
    /**
     * IPv6地址
     */
    IPV6,
    /**
     * 自定义类型
     */
    CUSTOM;

}

编写自定义注解

import com.fasterxml.jackson.annotation.JacksonAnnotationsInside

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-27 07:48:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-27 07:48:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-27 07:48:03       87 阅读
  4. Python语言-面向对象

    2023-12-27 07:48:03       96 阅读

热门阅读

  1. DshanMCU-R128s2硬件设计参考

    2023-12-27 07:48:03       55 阅读
  2. SpringBoot3 整合Redis

    2023-12-27 07:48:03       49 阅读
  3. vue3中安装并使用CSS预处理器Sass的方法介绍

    2023-12-27 07:48:03       62 阅读
  4. Redis Stream消息队列之基本语法与使用方式

    2023-12-27 07:48:03       39 阅读
  5. [oracle数据库]dblink的使用

    2023-12-27 07:48:03       63 阅读
  6. 如何将自建的ElasticSearch注册成一个服务

    2023-12-27 07:48:03       59 阅读
  7. codeforces 1676F

    2023-12-27 07:48:03       65 阅读
  8. latexshop 使用bug:xxx has a comma at the end

    2023-12-27 07:48:03       56 阅读
  9. c++ qt QtWidgetsApplication 项目 使用外部ui

    2023-12-27 07:48:03       61 阅读
  10. GO基础进阶篇 (八)、runtime包

    2023-12-27 07:48:03       67 阅读
  11. k8s解决 搭建集群的时候notReady问题

    2023-12-27 07:48:03       62 阅读
  12. 【Go语言入门:Go程序的流程控制语句】

    2023-12-27 07:48:03       50 阅读
  13. client-go使用方法

    2023-12-27 07:48:03       61 阅读