Spring自定义注解实现数据脱敏

 更新时间:2024年11月13日 10:43:39   作者:努力的小雨  
在当今数据安全越来越受到重视的背景下,许多企业都对敏感数据的保护有着严格的要求,本文就来深入探讨一下如何自定义注解来实现对敏感数据的脱敏处理吧

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

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

数据脱敏

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

自定义注解

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

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会自动将这些实体类进行序列化,以便在客户端和服务器之间进行数据交换。接下来,我们就开始具体实现这一过程。

@JsonSerialize(using = DesensitizeJsonSerializerByCustNm.class)
private  String       custNm;
@JsonSerialize(using = DesensitizeJsonSerializerByIdentityCard.class)
private  String       ssnCrnNo;

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

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

内部脱敏

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

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框架进行数据脱敏处理。我们通过具体的示例展示了如何为常见的敏感数据类型(如电话号码、身份证、电子邮件等)编写自定义注解,并在序列化过程中应用脱敏规则。通过这些注解,敏感信息可以在数据返回前端时自动进行脱敏,避免泄露。

到此这篇关于Spring自定义注解实现数据脱敏的文章就介绍到这了,更多相关Spring数据脱敏内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java设计模式之工厂方法和抽象工厂

    Java设计模式之工厂方法和抽象工厂

    本文详细讲解了Java设计模式之工厂方法和抽象工厂,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • Java 中很好用的数据结构(你绝对没用过)

    Java 中很好用的数据结构(你绝对没用过)

    今天跟大家介绍的就是 java.util.EnumMap,也是 java.util 包下面的一个集合类,同样的也有对应的的 java.util.EnumSet,对java数据结构相关知识感兴趣的朋友一起看看吧
    2022-05-05
  • Jackson处理Optional时遇到问题的解决与分析

    Jackson处理Optional时遇到问题的解决与分析

    Optional是Java实现函数式编程的强劲一步,并且帮助在范式中实现,但是Optional的意义显然不止于此,下面这篇文章主要给大家介绍了关于Jackson处理Optional时遇到问题的解决与分析的相关资料,需要的朋友可以参考下
    2022-02-02
  • 将ResultSet中得到的一行或多行结果集封装成对象的实例

    将ResultSet中得到的一行或多行结果集封装成对象的实例

    这篇文章主要介绍了将ResultSet中得到的一行或多行结果集封装成对象的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • mybatis中如何传递单个String类型的参数

    mybatis中如何传递单个String类型的参数

    这篇文章主要介绍了mybatis中如何传递单个String类型的参数,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • 如何解决executors线程池创建的线程不释放的问题

    如何解决executors线程池创建的线程不释放的问题

    这篇文章主要介绍了如何解决executors线程池创建的线程不释放的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • MyBatis-Plus自定义SQL和复杂查询的实现

    MyBatis-Plus自定义SQL和复杂查询的实现

    MyBatis-Plus增强了MyBatis的功能,提供注解和XML两种自定义SQL方式,支持复杂查询如多表关联、动态分页等,通过注解如@Select、@Insert、@Update、@Delete实现CRUD操作,本文就来介绍一下,感兴趣的可以了解一下
    2024-10-10
  • Spring中的aware接口详情

    Spring中的aware接口详情

    这篇文章主要介绍了Spring中的aware接口详情,Spring中有很多继承于aware中的接口,这些接口到底是做什么用到的,下面我们就一起来看看吧,文章详细内容需要的小伙伴可以参考一下
    2022-05-05
  • Java实现字符串切割的方法详解

    Java实现字符串切割的方法详解

    这篇文章主要为大家介绍了一些Java中切割字符串的小技巧,可以把性能提升5~10倍。文中的示例代码讲解详细,快跟随小编一起学习一下
    2022-03-03
  • Spring jdbc具名参数使用方法详解

    Spring jdbc具名参数使用方法详解

    这篇文章主要介绍了Spring jdbc具名参数使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08

最新评论