介绍
怎么在java中对日志的数据进行脱敏?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
<强>思路强>
1。在模型层进行处理,直接重写得到方法,在写一个getPlain获取明文方法。(缺点:数据库写入和json序列化传递时使用的都是密文)
2。利用日志组件过滤特定的钥匙,去进行脱敏(缺点:对所有的日志输出全部要正则匹配,非常耗时)。
由1、2的利弊,肯定会选择1,然后考虑一种实现(在模型层定义方法,获取它的一个复制类,复制类里面的信息都是脱敏的,日志输出时只输出复制对象),克服掉1的缺点,
1。定义接口类
public interface NoSensitiveObj, { ,default T  noSensitiveObj () { return 才能;(T),; ,} }
2。实现类如果这个类没有敏感信息,只实现NoSensitiveObj,不需要实现里面的方法
public class User implements NoSensitiveObj{ ,private String 名称; , ,private String 手机; , ,private String 电子邮件; ,public String  getName (), { return 才能,名字; ,} ,public void  setName (String 名称),{ this.name 才能=,名称; ,} ,public String  getPhone (), { return 才能;手机; ,} ,public void  setPhone (String 电话),{ 时间=this.phone 才能;手机; ,} ,public String  getEmail (), { return 才能;电子邮件; ,} ,public void  setEmail (String 电子邮件),{ 时间=this.email 才能;电子邮件; ,} ,@Override ,public User  noSensitiveObj (), { ,,User t; ,,t=new 用户(); ,,t.setEmail (SensitiveInfoUtils.email(电子邮件); ,,t.setName (SensitiveInfoUtils.chineseName(名字)); ,,t.setPhone (SensitiveInfoUtils.mobilePhone(手机)); return 才能;t; ,} , }
3。工具类
public class SensitiveInfoUtils {/* * *,才能[中文姓名),只显示第一个汉字,其他隐藏为2个星号& lt;例子:李* *比; ,*/,public static  String chineseName (final String  fullName), { if 才能;(StringUtils.isBlank (fullName)), { ,,return ““; ,,} final 才能String name =, StringUtils.left (fullName, 1); return 才能;StringUtils.rightPad(名称,StringUtils.length (fullName),“*”); ,}/* * *,才能[中文姓名),只显示第一个汉字,其他隐藏为2个星号& lt;例子:李* *比; ,*/,public static  String chineseName (final String  familyName,, final String givenName), { if 才能;(StringUtils.isBlank (familyName), | |, StringUtils.isBlank (givenName)), { ,,return ““; ,,} return 才能chineseName(时间+ familyName givenName); ,}/* * *,才能[身份证号],显示最后四位,其他隐藏。共18位计或者15位。你们;例子:* * * * * * * * * * * * * 5762比; ,*/,public static String  idCardNum (final String id), { if 才能;(StringUtils.isBlank (id), { ,,return ““; ,,} return 才能StringUtils.left (id, 3) .concat (stringutil的 ,,,.removeStart (StringUtils.leftPad (StringUtils.right (id, 3), StringUtils.length (id),“*“),,“* * *”)); ,}/* * *,才能(固定电话),后四位,其他隐藏& lt;例子:* * * * 1234比; ,*/,public static  String fixedPhone (final String  num), { if 才能;(StringUtils.isBlank (num)), { ,,return ““; ,,} return 才能;StringUtils.leftPad (StringUtils.right (num, 4), StringUtils.length (num),“*”); ,}/* * *,才能(手机号码),前三位,后四位,其他隐藏& lt;例子:138 * * * * * * 1234的在 ,*/,public static  String 手机(final String  num), { if 才能;(StringUtils.isBlank (num)), { ,,return ““; ,,} return 才能;StringUtils.left (num, 2) .concat (stringutil的 ,,,.removeStart (StringUtils.leftPad (StringUtils.right (num,, 2), StringUtils.length (num),“*“),,“* * *”)); ,}/* * *,才能[地址),只显示到地区,不显示详细地址;我们要对个人信息增强保护& lt;例子:北京市海淀区* * * *比; ,* *,才能@param sensitiveSize *才能,,,敏感信息长度 ,*/,public static  String 地址(final String 地址,final int sensitiveSize), { if 才能;(StringUtils.isBlank(地址),{ ,,return ““; ,,} final 才能int length =, StringUtils.length(地址); return 才能StringUtils.rightPad (StringUtils.left(地址,,length 作用;sensitiveSize),,,,“*”); ,}/* * null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null怎么在java中对日志的数据进行脱敏