SpringBoot 必备!Hutool DesensitizedUtil 助你轻松搞定敏感信息脱敏

开发 前端
DesensitizedUtil 作为 Hutool 工具库中的重要组成部分,为 Spring Boot 3.4 开发者提供了一种高效、灵活的敏感信息脱敏方案。通过结合 Jackson 进行自动序列化处理,可以进一步提升开发效率并增强数据安全性。

在现代应用开发中,敏感数据的保护至关重要。Hutool 作为一个强大的 Java 工具库,提供了许多实用的功能,其中 DesensitizedUtil 是专门用于敏感信息脱敏的工具类。本文将介绍 DesensitizedUtil 的核心功能、使用方法,并探讨其在实际应用中的场景。

DesensitizedUtil 功能介绍

DesensitizedUtil 是 Hutool 库中的一个数据脱敏工具类,旨在帮助开发者轻松处理各种敏感信息。它支持对以下多种数据类型进行脱敏:

  • 用户 ID
  • 中文姓名
  • 身份证号
  • 座机号、手机号
  • 地址信息
  • 电子邮件
  • 密码
  • 中国车牌(包括普通和新能源车牌)
  • 银行卡号

多种脱敏策略

DesensitizedUtil 提供了多种灵活的脱敏策略。例如:

  • 身份证号隐藏前两位和后四位,仅保留中间部分。
  • 手机号隐藏前三位和后四位,仅保留中间部分。
  • 密码所有字符替换为 * 号。
  • 中文姓名隐藏姓氏以外的字符。

如何使用 DesensitizedUtil

在 Spring Boot 3.4 项目中,我们可以直接使用 Hutool 提供的 DesensitizedUtil 来进行脱敏处理。

首先,添加 Hutool 依赖到 pom.xml:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.20</version>
</dependency>

身份证号脱敏

import cn.hutool.core.util.DesensitizedUtil;


public class DesensitizationExample {
    public static void main(String[] args) {
        String idCardNum = DesensitizedUtil.idCardNum("51343620000320711X", 1, 2);
        System.out.println(idCardNum); // 输出:513436**********11X
    }
}

效果:前两位和后四位可见,中间部分被 * 号隐藏。

手机号脱敏

String mobilePhone = DesensitizedUtil.mobilePhone("18049539199");
System.out.println(mobilePhone); // 输出:180****9399

效果:前三位和后四位可见,中间部分隐藏。

密码脱敏

String password = DesensitizedUtil.password("1234567890");
System.out.println(password); // 输出:**********

效果:所有字符都被 * 号替换。

中文姓名脱敏

String chineseName = DesensitizedUtil.chineseName("张三");
System.out.println(chineseName); // 输出:张**

效果:仅保留姓氏,其他字符隐藏。

实际应用场景

在实际开发中,DesensitizedUtil 在数据保护和隐私安全方面发挥了重要作用,尤其适用于以下场景:

  • 日志记录:避免日志中暴露敏感信息,如身份证号、手机号等。
  • 数据展示:用户界面或报表中脱敏展示,防止敏感数据泄露。
  • 数据传输:在 API 返回的数据中对敏感字段进行脱敏,减少数据安全风险。

在 Spring Boot 3.4 中使用自定义脱敏注解

为了让 DesensitizedUtil 更加便捷地与 Spring Boot 结合,可以使用 Jackson 注解自定义序列化器,实现数据自动脱敏。

创建自定义脱敏注解

package com.icoderoad.annotation;


import java.lang.annotation.*;


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface DesensitizedField {
    String type() default "default";
}

创建 Jackson 脱敏序列化器

package com.icoderoad.config;


import cn.hutool.core.util.DesensitizedUtil;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import java.io.IOException;


public class DesensitizedSerializer extends JsonSerializer<String> {
    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        gen.writeString(DesensitizedUtil.mobilePhone(value));
    }
}

在实体类中使用

package com.icoderoad.entity;


import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.icoderoad.config.DesensitizedSerializer;


public class User {
    private String name;


    @JsonSerialize(using = DesensitizedSerializer.class)
    private String phone;
}

这样,在 Spring Boot 3.4 运行时,返回的 phone 字段会自动脱敏,无需手动调用 DesensitizedUtil。

结论

DesensitizedUtil 作为 Hutool 工具库中的重要组成部分,为 Spring Boot 3.4 开发者提供了一种高效、灵活的敏感信息脱敏方案。通过结合 Jackson 进行自动序列化处理,可以进一步提升开发效率并增强数据安全性。

无论是日志保护、数据展示,还是 API 数据返回,合理使用 DesensitizedUtil 都可以显著减少敏感信息泄露的风险。快来为你的 Spring Boot 项目引入这一强大工具吧!

责任编辑:武晓燕 来源: 路条编程
相关推荐

2010-06-04 09:08:56

2023-10-09 07:37:01

2025-03-04 08:40:28

2024-12-27 08:39:10

2024-02-05 13:39:00

隐私数据脱敏

2024-09-09 16:50:21

2023-11-23 19:36:58

2012-06-20 09:44:43

2024-01-22 08:46:37

MyBatis数据脱敏Spring

2014-06-19 10:04:20

Docker

2024-09-10 10:04:47

2022-09-16 08:04:25

阿里云权限网络

2017-05-11 15:01:43

Androidweb布局

2009-12-11 15:37:58

Linux日志处理

2024-08-30 14:25:26

2023-06-06 08:51:06

2024-08-29 08:58:30

JPA编写数据操

2024-07-17 08:29:20

2011-06-29 11:53:54

WPS表格

2021-10-28 09:42:38

代码编码开发
点赞
收藏

51CTO技术栈公众号