工作常备:自定义注解实现数据脱敏

今天,我们将深入探讨如何自定义注解来实现对敏感数据的脱敏处理。在当今数据安全越来越受到重视的背景下,许多企业都对敏感数据的保护有着严格的要求,尤其是在处理涉及个人隐私、财务信息等敏感数据时,脱敏成为了一个至关重要的环节。因此,今天的内容将着重于实践操作,而不会涉及过多的理论解析。

我们将通过一个具体的示例,逐步展示如何通过自定义注解来对数据进行脱敏处理,整个过程仅依赖Spring框架,无需引入任何第三方库或额外的依赖。只需要跟随步骤操作,即可完成相应的功能实现。接下来,让我们开始这一实战篇的学习吧。

数据脱敏

我们需要处理的脱敏数据种类繁多,包括但不限于身份证号码、电话号码、用户名、微信号等。每种数据类型都有其特定的加密或脱敏规则,因此必须对每种数据类型进行单独处理。

自定义注解

接下来,我们将需要使用自定义注解来实现特定的功能和行为。这些注解将根据其定义的用途,分别作用于各个类的属性上,以便在不同的上下文中提供所需的标识、验证或处理逻辑。好的,我们编写一下:

java 复制代码
public class DesensitizeJsonSerializerByTelNo extends JsonSerializer<String> {
    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // 在序列化时进行数据脱敏
        gen.writeString(value.replaceAll("(?<=^..).(?=.*..$)", "*"));
    }
}


public class DesensitizeJsonSerializerByCustNm extends JsonSerializer<String> {

    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // 在序列化时进行数据脱敏
        gen.writeString(value.replaceAll("(?<=^.).*", "*"));
    }
}


public class DesensitizeJsonSerializerByEmail extends JsonSerializer<String> {
    @Override
    public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
        // 在序列化时进行数据脱敏
        gen.writeString(value.replaceAll("(?<=^.|(?<=@.).)([^@])(.*)(?=@|$)", "*$3"));
    }
}

在这里,我们不打算列举所有可能的注解,而是选择列举三个最常用、最具代表性的注解类型。这些注解覆盖了我们在实际开发中最常见的需求。接下来,我们就开始在具体的类和属性上添加这些注解。

用法

我们通常会使用实体类来作为返回数据类型传递给Spring框架,Spring会自动将这些实体类进行序列化,以便在客户端和服务器之间进行数据交换。接下来,我们就开始具体实现这一过程。

java 复制代码
@JsonSerialize(using = DesensitizeJsonSerializerByCustNm.class)
private  String       custNm;
@JsonSerialize(using = DesensitizeJsonSerializerByIdentityCard.class)
private  String       ssnCrnNo;

在这里,我们仅演示基本的脱敏用法。这种方式基本上能够确保在返回给前端时,数据会经过注解标记的序列化脱敏处理,从而避免敏感信息泄露。然而,如果我们需要在内部处理过程中也对数据进行脱敏,该怎么办呢?因为默认情况下,脱敏操作仅会在数据返回给前端时通过注解触发,而在内部逻辑中,数据并不会自动脱敏。

在这种情况下,我们可以使用 ObjectMapper 来手动对对象进行脱敏操作,确保在内部使用时也能达到相同的脱敏效果。

内部脱敏

接下来,在这个示例中,我们会演示如何通过脱敏处理来保护敏感信息的隐私。以下是具体的代码实现:

java 复制代码
List<ResultInfoVO> list = selectResultByCondition(searchVO);
ObjectMapper objectMapper = new ObjectMapper();
String s = objectMapper.writeValueAsString(list);
list = objectMapper.readValue(s, new com.fasterxml.jackson.core.type.TypeReference<List<ResultInfoVO>>() {});

"通过这种方式,数据会自动进行脱敏处理。实际上,整个过程只是通过序列化将对象转换成可传输的格式,再经过反序列化恢复成原始对象的过程。

总结

在数据安全日益重要的今天,敏感数据的脱敏处理显得尤为关键,尤其是在涉及个人隐私和财务信息时。本文探讨了如何通过自定义注解,在不引入第三方库的情况下,使用Spring框架进行数据脱敏处理。我们通过具体的示例展示了如何为常见的敏感数据类型(如电话号码、身份证、电子邮件等)编写自定义注解,并在序列化过程中应用脱敏规则。通过这些注解,敏感信息可以在数据返回前端时自动进行脱敏,避免泄露。


我是努力的小雨,一名 Java 服务端码农,潜心研究着 AI 技术的奥秘。我热爱技术交流与分享,对开源社区充满热情。同时也是一位腾讯云创作之星、阿里云专家博主、华为云云享专家、掘金优秀作者。

💡 我将不吝分享我在技术道路上的个人探索与经验,希望能为你的学习与成长带来一些启发与帮助。

🌟 欢迎关注努力的小雨!🌟

相关推荐
杜若南星1 小时前
保研考研机试攻略(满分篇):第二章——满分之路上(1)
数据结构·c++·经验分享·笔记·考研·算法·贪心算法
小奥超人2 小时前
PPT技巧:如何合并PPT文件?
windows·经验分享·microsoft·powerpoint·办公技巧
中云DDoS CC防护蔡蔡5 小时前
为什么海外服务器IP会被封
服务器·经验分享
棱角~~5 小时前
10款PDF合并工具讲解与推荐!!!
人工智能·经验分享·其他·pdf·学习方法
南暮思鸢7 小时前
Node.js is Web Scale
经验分享·web安全·网络安全·node.js·ctf题目·hackergame 2024
亦世凡华、12 小时前
【HarmonyOS】鸿蒙系统在租房项目中的项目实战(一)
经验分享·harmonyos·harmonyos next·arkui·鸿蒙开发
源代码•宸18 小时前
完美解决 no model scale passed. assuming scale=‘n‘ 的YOLO问题
经验分享·yolo
xiao_xx19 小时前
华为云计算HCIE-Cloud Computing V3.0试验考试北京考场经验分享
经验分享·华为云
erxij1 天前
【游戏引擎之路】登神长阶(十四)——OpenGL教程:士别三日,当刮目相看
c++·经验分享·游戏·3d·游戏引擎