SpringBoot利用自定義json序列化器實現(xiàn)敏感字段數(shù)據(jù)脫敏詳解
引入hutool依賴
因為案例代碼用到了hutool提供的DesensitizedUtil數(shù)據(jù)脫敏工具類,這里要引入hutool的依賴。
如果你需要自定義 數(shù)據(jù)脫敏的邏輯,可以不引入這個依賴
<dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.7.8</version> </dependency>
自定義jackson序列化器
自定義一個手機號脫敏序列化器
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); } }
自定義一個郵箱脫敏序列化器
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); } }
注冊剛剛自定義的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; /** * 可以同時注冊多個自定義的jackson 序列化器 * @return */ @Bean public Jackson2ObjectMapperBuilderCustomizer objectMapperBuilderCustomizer(){ return builder -> { builder.serializerByType(String.class,mobileMskJsonSerializer); builder.serializerByType(String.class,mailMskJsonSerializer); }; } }
測試@JsonSerialize效果
在實體類中使用@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 既可以用在字段上 ,也可以用在類上 // 用在字段上時,只對某個字段生效 // 用在類上時,對類中所有字段生效.(優(yōu)先級更高) // 一般常用在 字段上,對某個字段做特殊的序列化處理 //使用 手機號脫敏序列號器 @JsonSerialize(using = MobileMskJsonSerializer.class) private String mobile; //使用 郵箱脫敏序列號器 @JsonSerialize(using = MailMskJsonSerializer.class) private String mail; }
測試查詢結(jié)果
@Test void test81902() throws JsonProcessingException { Account oneById = accountMapper.findOneById(17); System.err.println(oneById); //使用jackson 序列化java對象 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序列化器實現(xiàn)敏感字段數(shù)據(jù)脫敏詳解的文章就介紹到這了,更多相關(guān)SpringBoot敏感字段數(shù)據(jù)脫敏內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot項目部署到阿里云服務(wù)器的實現(xiàn)步驟
本文主要介紹了SpringBoot項目部署到阿里云服務(wù)器的實現(xiàn)步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2022-06-06Knife4j?3.0.3?整合SpringBoot?2.6.4的詳細過程
本文要講的是?Knife4j?3.0.3?整合SpringBoot?2.6.4,在SpringBoot?2.4以上的版本和之前的版本還是不一樣的,這個也容易導(dǎo)致一些問題,本文就這兩個版本的整合做一個實戰(zhàn)介紹2022-09-09Hibernate 與 Mybatis 的共存問題,打破你的認知!(兩個ORM框架)
這篇文章主要介紹了Hibernate 與 Mybatis 如何共存?本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08Java?多個文件生成zip包、下載zip包的實現(xiàn)代碼
這篇文章主要介紹了Java?多個文件生成zip包、下載zip包,包括文件上傳,文件下載,多個文件打成zip包的操作代碼,本文給大家介紹的非常詳細,需要的朋友可以參考下2024-01-01