利用Java给敏感字段脱敏
需求
客户信息中,有敏感字段比如身份证,银行卡,手机号码等字段要进行脱敏处理(加星号).
解决方案
想实现一个工具类调用XxxUtils.maskObject(obj);就可以实现脱敏,过程中想到的是用反射,然后给需要脱敏的字段加上注解.可能有需求要将星号变成美元符号,手机号码保留前3位与后四位,身份证保留前后,各一位,所以考虑在注解@Sensitive中加入3属性sensitiveChar替换字符,prefixLength前缀预留长度,suffixLength后缀预留长度;之后再maskObject()方法中进行反射之后将值进行脱敏处理.
定义的Sensitive注解:
1 |
|
Sensitive主要为类的属性进行描叙,方便我们反射的时候获取预留信息.
定义的反射工具类MaskUtils:
1 | import org.slf4j.Logger; |
工具类里面抛出两个异常,其实可以查看到是不会出现异常的情况的.
测试类:
1 |
|
其实Java反射这样用着还是不错的,第一次尝试自己造轮子. 于是当我第一次把轮子给我的小伙伴的时候,他直接怼了我一句:花了一下午搞定这个,你直接重写toString不久可以了?…….
WTF, 还有这种操作?????????
但是后来仔细想想,他的这种可能侵入就很大了,比如我的类toString是输出类的原始信息,按照他这样,那我怎么获取类原始信息.另外每一个类里面都要去这样写,我这种懒人不太适合.
所以~~~~,我就喜欢造轮子.