后端用户信息接口脱敏方案(二) 自定义注解+jackson序列化

浅谈Java后端用户信息接口脱敏

在开发中,接口往往会返回用户的敏感信息,比如手机号、身份证号、邮箱等。为了保护用户隐私、降低安全风险、并满足法律合规要求,我们需要对这些数据进行脱敏处理
本文基于 Spring Boot 和 Jackson 提供一种灵活的注解式脱敏方案,并结合 Hutool 工具类 DesensitizedUtil 做扩展与优化。

如何使用

分为两个步骤:

1. 自定义Serializer

自定义jackson序列化器,需要集成JsonSerializer,重写serialize方法实现脱敏逻辑

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import com.example.demo.utils.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 PhoneDesensitizationSerializer extends JsonSerializer<String> {
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
// 使用Hutool工具类进行脱敏处理
String desensitizedValue = DesensitizedUtil.desensitized(value);
// 将脱敏后的值写入JSON
gen.writeString(desensitizedValue);
}
}

2. 简单调用

在需要被脱敏的字段上使用@JsonSerialize注解,并使用自定义的序列化器, 比如手机号脱敏:

1
2
3
4
5

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.nageoffer.shortlink.admin.common.serialize.PhoneDesensitizationSerializer;

@JsonSerialize(using = PhoneDesensitizationSerializer.class)

ToDo

还有很多待补充
可能需要对脱敏和非脱敏分别进行处理,以满足不同业务需求

参考博客文章

About this Post

This post is written by Rui Xu, licensed under CC BY-NC 4.0.

#Java