设为首页 加入收藏

TOP

【深度思考】如何优雅的实现脱敏?(三)
2023-09-09 10:26:00 】 浏览:107
Tags:何优雅
object.getClass().getDeclaredField(name); Desensitize desensitize = field.getAnnotation(Desensitize.class); if (desensitize == null) { return value; } if (!(value instanceof String) || ((String) value).length() == 0) { return value; } String valueStr = (String) value; DesensitizeType type = desensitize.type(); switch (type) { // 手机号脱敏 case MOBILE_PHONE: return DesensitizedUtil.mobilePhone(valueStr); // 车牌号脱敏 case LICENSE_NUMBER: return DesensitizedUtil.carLicense(valueStr); // 身份证号脱敏 case ID_CARD: return DesensitizedUtil.idCardNum(valueStr, 3, 4); // 银行卡脱敏 case BANK_CARD: return DesensitizedUtil.bankCard(valueStr); // 自定义脱敏 case CUSTOM: return CharSequenceUtil.hide(valueStr, desensitize.startIndex(), desensitize.endIndex()); default: break; } } catch (NoSuchFieldException e) { return value; } return value; } }

然后在上面声明httpMessageConverters()的地方新增以下代码:

fastJsonConfig.setSerializeFilters(new Desensitizeva lueFilter());

此时,上文中自定义的脱敏注解中,@JacksonAnnotationsInside@JsonSerialize(using = DesensitizeSerializer.class)

可以移除:

再次运行验证,会发现自定义脱敏注解生效了:

4.3 注意影响范围

在VO的某个字段上加上@Desensitize(type = DesensitizeType.MOBILE_PHONE)后,所有使用到该VO的接口,在返回数据时,

该字段都会被脱敏,如果列表页接口和详情接口共用了这个VO,但实际情况是列表页该字段需要脱敏,编辑页该字段不需要脱敏,

这种场景就需要特别注意。

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Factory Pattern —— Creational.. 下一篇Redis的五大数据类型的数据结构

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目