怎么在java中对日志的数据进行脱敏

  介绍

怎么在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中对日志的数据进行脱敏