设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间09 现在时间09 缓存数据 我们所有的努力所有的奋斗,都是为了拥有一个美好的未来。和遇见更好的自己。请把努力当成一种习惯,而不是三分钟热度。每一个你羡慕的收获,都是努力用心拼来的。早安!

我们所有的努力所有的奋斗,都是为了拥有一个美好的未来。和遇见更好的自己。请把努力当成一种习惯,而不是三分钟热度。每一个你羡慕的收获,都是努力用心拼来的。早安!

查看: 716|回复: 2

SpringBoot利用自定义json序列化器实现敏感字段数据脱敏详解

[复制链接]

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:11
  • 最近打卡:2024-07-01 08:41:13
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
35
主题
27
精华
0
金钱
111
积分
64
注册时间
2023-10-3
最后登录
2025-3-14

发表于 2024-7-4 14:55:50 | 显示全部楼层 |阅读模式
目录


  • 引入hutool依赖
  • 自定义jackson序列化器
  • 测试@JsonSerialize效果

引入hutool依赖

因为案例代码用到了hutool提供的DesensitizedUtil数据脱敏工具类,这里要引入hutool的依赖。
如果你需要自定义 数据脱敏的逻辑,可以不引入这个依赖
  1. <dependency>
  2.     <groupId>cn.hutool</groupId>
  3.     <artifactId>hutool-all</artifactId>
  4.     <version>5.7.8</version>
  5. </dependency>
复制代码
自定义jackson序列化器

自定义一个手机号脱敏序列化器
  1. package com.example.demo.plugin;
  2. import cn.hutool.core.util.DesensitizedUtil;
  3. import com.fasterxml.jackson.core.JsonGenerator;
  4. import com.fasterxml.jackson.databind.JsonSerializer;
  5. import com.fasterxml.jackson.databind.SerializerProvider;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.stereotype.Component;
  8. import java.io.IOException;
  9. @Slf4j
  10. @Component
  11. public class MobileMskJsonSerializer extends JsonSerializer<String> {
  12.     @Override
  13.     public void serialize(String s,
  14.                           JsonGenerator jsonGenerator,
  15.                           SerializerProvider serializerProvider) throws IOException {
  16.         String s1 = DesensitizedUtil.mobilePhone(s);
  17.         log.info("mobilePhone数据:{}脱敏后的值是:{}",s,s1);
  18.         jsonGenerator.writeString(s1);
  19.     }
  20. }
复制代码
自定义一个邮箱脱敏序列化器
  1. package com.example.demo.plugin;
  2. import cn.hutool.core.util.DesensitizedUtil;
  3. import com.fasterxml.jackson.core.JsonGenerator;
  4. import com.fasterxml.jackson.databind.JsonSerializer;
  5. import com.fasterxml.jackson.databind.SerializerProvider;
  6. import lombok.extern.slf4j.Slf4j;
  7. import org.springframework.stereotype.Component;
  8. import java.io.IOException;
  9. @Slf4j
  10. @Component
  11. public class MailMskJsonSerializer extends JsonSerializer<String> {
  12.     @Override
  13.     public void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
  14.         String s1 = DesensitizedUtil.email(s);
  15.         log.info("email数据:{}脱敏后的值是:{}",s,s1);
  16.         jsonGenerator.writeString(s1);
  17.     }
  18. }
复制代码
注册刚刚自定义的json序列化器
  1. package com.example.demo.plugin;
  2. import org.springframework.beans.factory.annotation.Autowired;
  3. import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
  4. import org.springframework.context.annotation.Bean;
  5. import org.springframework.context.annotation.Configuration;
  6. @Configuration
  7. public class JacksonCfg {
  8.     @Autowired
  9.     private MobileMskJsonSerializer  mobileMskJsonSerializer;
  10.     @Autowired
  11.     private MailMskJsonSerializer mailMskJsonSerializer;
  12.     /**
  13.      * 可以同时注册多个自定义的jackson 序列化器
  14.      * @return
  15.      */
  16.     @Bean
  17.     public Jackson2ObjectMapperBuilderCustomizer objectMapperBuilderCustomizer(){
  18.         return builder -> {
  19.             builder.serializerByType(String.class,mobileMskJsonSerializer);
  20.             builder.serializerByType(String.class,mailMskJsonSerializer);
  21.         };
  22.     }
  23. }
复制代码
测试@JsonSerialize效果

在实体类中使用@JsonSerialize注解
  1. package com.example.demo.orm.po;
  2. import cn.hutool.core.util.DesensitizedUtil;
  3. import com.example.demo.plugin.MailMskJsonSerializer;
  4. import com.example.demo.plugin.MobileMskJsonSerializer;
  5. import com.fasterxml.jackson.databind.annotation.JsonSerialize;
  6. import lombok.AllArgsConstructor;
  7. import lombok.Builder;
  8. import lombok.Data;
  9. import lombok.NoArgsConstructor;
  10. import java.io.Serializable;
  11. @Data
  12. @AllArgsConstructor
  13. @NoArgsConstructor
  14. @Builder
  15. public class Account implements Serializable {
  16.     private static final long serialVersionUID = -8114863398578320034L;
  17.     private Integer id;
  18.     private String username;
  19.     // @JsonSerialize 既可以用在字段上 ,也可以用在类上
  20.     // 用在字段上时,只对某个字段生效
  21.     // 用在类上时,对类中所有字段生效.(优先级更高)
  22.     // 一般常用在 字段上,对某个字段做特殊的序列化处理
  23.     //使用 手机号脱敏序列号器
  24.     @JsonSerialize(using = MobileMskJsonSerializer.class)
  25.     private String mobile;
  26.     //使用 邮箱脱敏序列号器
  27.     @JsonSerialize(using = MailMskJsonSerializer.class)
  28.     private String mail;
  29. }
复制代码
测试查询结果
  1. @Test
  2. void test81902() throws JsonProcessingException {
  3.         Account oneById = accountMapper.findOneById(17);
  4.         System.err.println(oneById);
  5.         //使用jackson 序列化java对象
  6.         ObjectMapper objectMapper = new ObjectMapper();
  7.         String msk = objectMapper.writerWithDefaultPrettyPrinter()
  8.                 .writeValueAsString(oneById);
  9.         System.err.println(msk);
  10. }
复制代码
  1. Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@7135ce0a]Account(id=17, username=ert, mobile=13273629312, mail=kew5612@163.com)2023-07-05 20:28:38.536  INFO 17952 --- [           main] c.e.demo.plugin.MobileMskJsonSerializer  : mobilePhone数据:13273629312脱敏后的值是:132****93122023-07-05 20:28:38.537  INFO 17952 --- [           main] c.e.demo.plugin.MailMskJsonSerializer    : email数据:kew5612@163.com脱敏后的值是:k******@163.com{  "id" : 17,  "username" : "ert",  "mobile" : "132****9312",  "mail" : "k******@163.com"}
复制代码
到此这篇关于SpringBoot利用自定义json序列化器实现敏感字段数据脱敏详解的文章就介绍到这了,更多相关SpringBoot敏感字段数据脱敏内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:2
  • 打卡月天数:0
  • 打卡总奖励:33
  • 最近打卡:2025-04-09 01:59:19
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
47
积分
8
注册时间
2023-10-30
最后登录
2025-4-9

发表于 2024-11-21 02:19:19 | 显示全部楼层
路过,支持一下
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
18
积分
16
注册时间
2022-12-29
最后登录
2022-12-29

发表于 3 天前 | 显示全部楼层
顶顶更健康!!!
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼
3楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表