利用Jackson序列化实现数据脱敏
几天前使用了Jackson对数据的自定义序列化。突发灵感,利用此方法来简单实现接口返回数据脱敏,故写此文记录。核心思想是利用Jackson的StdSerializer,@JsonSerialize,以及自己实现的数据脱敏过程。
使用效果如下:首先在需要进行脱敏的VO字段上面标注相关脱敏注解
调用接口即可看到脱敏效果
实现过程如下:1. 定义脱敏的过程实现 /** * Created by EalenXie on 2021/9/24 15:52 * 顶级的脱敏器 */ public interface Desensitization { /** * 脱敏实现 * * @param target 脱敏对象 * @return 脱敏返回结果 */ T desensitize(T target); }
比如具体的手机号脱敏器实现import com.github.Symbol; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Created by EalenXie on 2021/9/24 15:56 * 手机号脱敏器 默认只保留前3位和后4位 */ public class PhoneDesensitization implements StringDesensitization { /** * 手机号正则 */ private static final Pattern DEFAULT_PATTERN = Pattern.compile("(13[0-9]|14[579]|15[0-3,5-9]|16[6]|17[0135678]|18[0-9]|19[89])d{8}"); /** * 手机号脱敏 只保留前3位和后4位 */ @Override public String desensitize(String target) { Matcher matcher = DEFAULT_PATTERN.matcher(target); while (matcher.find()) { String group = matcher.group(); target = target.replace(group, group.substring(0, 3) + Symbol.getSymbol(4, Symbol.STAR) + group.substring(7, 11)); } return target; } } 2.定义脱敏注解,并指明了使用的序列化器,注解中声明了使用的脱敏器实现 package com.github.annotation; import com.fasterxml.jackson.annotation.JacksonAnnotationsInside; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.github.desensitization.Desensitization; import com.github.serializer.ObjectDesensitizeSerializer; import java.lang.annotation.*; /** * Created by EalenXie on 2021/10/8 11:30 */ @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @JacksonAnnotationsInside @JsonSerialize(using = ObjectDesensitizeSerializer.class) @Documented public @interface Desensitize { /** * 脱敏器实现 */ @SuppressWarnings("all") Class<? extends Desensitization<?>> desensitization(); } 3. 实现定义的序列化器 import com.fasterxml.jackson.core.JsonGenerator; import com.fasterxml.jackson.databind.BeanProperty; import com.fasterxml.jackson.databind.JsonSerializer; import com.fasterxml.jackson.databind.SerializerProvider; import com.fasterxml.jackson.databind.ser.ContextualSerializer; import com.fasterxml.jackson.databind.ser.std.StdSerializer; import com.github.Symbol; import com.github.annotation.Desensitize; import com.github.desensitization.Desensitization; import com.github.desensitization.DesensitizationFactory; import com.github.desensitization.StringDesensitization; import java.io.IOException; /** * Created by EalenXie on 2021/8/9 9:03 * 脱敏序列化器 */ public class ObjectDesensitizeSerializer extends StdSerializer
在今天,5G真的那么重要吗?前面已经讲了好几期关于品牌信任的文章了,这不又一个活生生的例子来了!8月12日华为P50开售,当天就被一扫而空,这反映了华为用户和品牌的黏度之高,和信任度的牢固。当初商家和用户都担
华为手机怎么充电好?关于手机充电这个问题一直存在争议,其实不单单华为手机,其它手机用的也是目前主流的锂电池,它们充电注意都是一样的。只需要按照正确方法使用,锂电池使用寿命都是比较长的。什么情况下最伤电
荣耀Magic3支持数字人民币硬件钱包,数字货币终将走进千万家昨天(8月12日)晚上,脱离华为自成独立品牌将近10个月的荣耀,在万众瞩目中发布了进军高端市场的全新旗舰手机荣耀Magic3。可以毫不夸张地说,无论是对于华为和荣耀两个品牌,还是对
手机被人定位监控,需要怎么取消?这个事情还是比较可怕的,不过也不难解决,尽量还是能早发现早处理,下面说一下具体方法首先我们要知道手机被定位监控的原理是什么,目前主要有两种方式,第一个是物理监控的方式,简而言之就是
Mate40Pro与iPhone12ProMax该如何选择?一个是安卓的末代机皇,一个iPhone史上最强,两者该如何选择?让我们分别从性能信号外观续航和拍照上分别对比一下。对比完,就知道该如何选择了。性能末代麒麟PK苹果杀手锏A14史上最
比较实用的手机APP有哪些?我推荐三类软件给你,用于日常的学习,工作,生活中,可以极大方便我们的生活,有效提高工作效率。一。学习类在学习中,我推荐一些手机软件,比如,WPS,PDF阅读器,腾讯翻译君,百度网盘
新能源车吐槽声不断,为何有人却说开了新能源车不想开燃油车?在相关政策的推动下,新能源汽车在国内市场上的销量越来越高。再加上造车技术的进步,人们对新能源汽车的认可度也越来越高了。有一些购买了新能源汽车的车主还表示,开了新能源汽车后,自己都不
人的偏见,开始影响科技真伪,为核心决策真实性,人类开始想办法现在已经进入了数字化时代,不论是企业还是国家,都在尽快做好数字化转型工作。但是在这个转型过程之中,人与科技之间难免发生矛盾。例如人工智能技术,已经被应用多年。像我们经常可以看到的推
专帮AppleID和手机号网上随便买?是的,60元就有1万条近日,有大量苹果用户向专帮平台反馈,自己iPhoneiPad等设备的共享相簿中频繁收到博彩淘宝刷单抖音涨粉等广告的推送,实在避之不及。即使一一将垃圾内容举报,广告内容还是会源源不断
合发快报技术服务市场合发全球合美惠CTO教创业者做流量分析合发全球合美惠电商运营培训师指出,电商APP运营要学会做好流量分析,而在流量分析中,有几个关键指标是创业者必须要弄清楚的。此外,互联网创业者还必须懂一些基础的互联网知识,比如什么是
科技浪潮之下,方太的信条撰文陈晓平韩璐编辑陈晓平一系列整治,降临到算法上。在外卖领域,七部门发文,要求不得将最严算法作为考核要求,合理确定订单数量准时率在线率等考核要素在未成年人保护领域,清朗专项行动要求