SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏詳解
引入hutool依賴
因?yàn)榘咐a用到了hutool提供的DesensitizedUtil數(shù)據(jù)脫敏工具類,這里要引入hutool的依賴。
如果你需要自定義 數(shù)據(jù)脫敏的邏輯,可以不引入這個(gè)依賴
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.7.8</version>
</dependency>
自定義jackson序列化器
自定義一個(gè)手機(jī)號(hào)脫敏序列化器
package com.example.demo.plugin;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Slf4j
@Component
public class MobileMskJsonSerializer extends JsonSerializer<String> {
@Override
public void serialize(String s,
JsonGenerator jsonGenerator,
SerializerProvider serializerProvider) throws IOException {
String s1 = DesensitizedUtil.mobilePhone(s);
log.info("mobilePhone數(shù)據(jù):{}脫敏后的值是:{}",s,s1);
jsonGenerator.writeString(s1);
}
}自定義一個(gè)郵箱脫敏序列化器
package com.example.demo.plugin;
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 lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Slf4j
@Component
public class MailMskJsonSerializer extends JsonSerializer<String> {
@Override
public void serialize(String s, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
String s1 = DesensitizedUtil.email(s);
log.info("email數(shù)據(jù):{}脫敏后的值是:{}",s,s1);
jsonGenerator.writeString(s1);
}
}注冊(cè)剛剛自定義的json序列化器
package com.example.demo.plugin;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class JacksonCfg {
@Autowired
private MobileMskJsonSerializer mobileMskJsonSerializer;
@Autowired
private MailMskJsonSerializer mailMskJsonSerializer;
/**
* 可以同時(shí)注冊(cè)多個(gè)自定義的jackson 序列化器
* @return
*/
@Bean
public Jackson2ObjectMapperBuilderCustomizer objectMapperBuilderCustomizer(){
return builder -> {
builder.serializerByType(String.class,mobileMskJsonSerializer);
builder.serializerByType(String.class,mailMskJsonSerializer);
};
}
}測(cè)試@JsonSerialize效果
在實(shí)體類中使用@JsonSerialize注解
package com.example.demo.orm.po;
import cn.hutool.core.util.DesensitizedUtil;
import com.example.demo.plugin.MailMskJsonSerializer;
import com.example.demo.plugin.MobileMskJsonSerializer;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class Account implements Serializable {
private static final long serialVersionUID = -8114863398578320034L;
private Integer id;
private String username;
// @JsonSerialize 既可以用在字段上 ,也可以用在類上
// 用在字段上時(shí),只對(duì)某個(gè)字段生效
// 用在類上時(shí),對(duì)類中所有字段生效.(優(yōu)先級(jí)更高)
// 一般常用在 字段上,對(duì)某個(gè)字段做特殊的序列化處理
//使用 手機(jī)號(hào)脫敏序列號(hào)器
@JsonSerialize(using = MobileMskJsonSerializer.class)
private String mobile;
//使用 郵箱脫敏序列號(hào)器
@JsonSerialize(using = MailMskJsonSerializer.class)
private String mail;
}測(cè)試查詢結(jié)果
@Test
void test81902() throws JsonProcessingException {
Account oneById = accountMapper.findOneById(17);
System.err.println(oneById);
//使用jackson 序列化java對(duì)象
ObjectMapper objectMapper = new ObjectMapper();
String msk = objectMapper.writerWithDefaultPrettyPrinter()
.writeValueAsString(oneById);
System.err.println(msk);
}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數(shù)據(jù):13273629312脫敏后的值是:132****9312
2023-07-05 20:28:38.537 INFO 17952 --- [ main] c.e.demo.plugin.MailMskJsonSerializer : email數(shù)據(jù):kew5612@163.com脫敏后的值是:k******@163.com
{
"id" : 17,
"username" : "ert",
"mobile" : "132****9312",
"mail" : "k******@163.com"
}
到此這篇關(guān)于SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏詳解的文章就介紹到這了,更多相關(guān)SpringBoot敏感字段數(shù)據(jù)脫敏內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于SpringBoot整合RabbitMQ實(shí)現(xiàn)死信隊(duì)列
這篇文章主要介紹了關(guān)于SpringBoot整合RabbitMQ實(shí)現(xiàn)死信隊(duì)列,死信隊(duì)列實(shí)際上就是一個(gè)普通的隊(duì)列,只是這個(gè)隊(duì)列跟死信交換機(jī)進(jìn)行了綁定,用來存放死信而已,需要的朋友可以參考下2023-05-05
SpringBoot項(xiàng)目速度提升之延遲初始化(Lazy Initialization)詳解
延遲初始化(Lazy?Initialization)是一種在需要時(shí)才創(chuàng)建或加載對(duì)象的策略,以減少啟動(dòng)時(shí)間和資源消耗,本文就來講講延遲初始化的具體使用吧2023-05-05
Security中的WebSecurityConfigurerAdapter詳解
這篇文章主要介紹了Security中的WebSecurityConfigurerAdapter詳解,今天我們要進(jìn)一步的的學(xué)習(xí)如何自定義配置Spring?Security,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07
JavaWeb Session 會(huì)話管理實(shí)例詳解
這篇文章主要介紹了JavaWeb Session 會(huì)話管理的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-09-09
Java日常練習(xí)題,每天進(jìn)步一點(diǎn)點(diǎn)(30)
下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧,希望可以幫到你2021-07-07
如何用Dos命令運(yùn)行Java版HelloWorld你知道嗎
這篇文章主要介紹了在dos窗口中編譯和運(yùn)行java文件的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08
Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南
這篇文章主要介紹了Spring的BeanUtils.copyProperties屬性復(fù)制避坑指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
SpringBoot項(xiàng)目的多文件兼多線程上傳下載
本文主要介紹了SpringBoot項(xiàng)目的多文件兼多線程上傳下載,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04

