SpringBoot利用自定義json序列化器實(shí)現(xiàn)敏感字段數(shù)據(jù)脫敏
物料準(zhǔn)備:
1.hutool依賴
2.自定義的jackson序列化器
3.測(cè)試@JsonSerialize效果
引入hutool依賴
因?yàn)榘咐a用到了hutool提供的DesensitizedUtil數(shù)據(jù)脫敏工具類,這里要引入hutool的依賴。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-524215.html
如果你需要自定義 數(shù)據(jù)脫敏的邏輯,可以不引入這個(gè)依賴文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-524215.html
<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ù)脫敏的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!