【问题标题】:Mask certain string attributes in Java during logging?在记录期间屏蔽Java中的某些字符串属性?
【发布时间】:2018-01-11 02:37:19
【问题描述】:

有没有一种方法可以屏蔽密码等类的某些字符串变量,从而防止在记录期间发生?就像以这种方式覆盖 toString() 方法一样,它不会在日志中打印。

例如,我们有一个包含以下字段的 Employee 类:

public class Employee {
    private String username;
    **private String password; //mask this field**
    private String city;
}

在记录期间

LOGGER.INFO("打印对象:"+employee);

在日志记录中,我正在尝试打印整个对象,这里是员工,我的要求是 根本不打印屏蔽字段、密码,而其余字段的日志记录是很好。

【问题讨论】:

  • 只需将其从toString 中排除?
  • 覆盖toString() 方法并打印您需要的任何内容...
  • 散列密码。

标签: java logging masking


【解决方案1】:

第一个明显的选择是覆盖 toString(),例如:

public class Employee {
    private String username;
    private String password;
    private String city;

    @Override
    public String toString() {
        return "username=" + username + " city=" + city;

    }

    public static void main(String[] args) {
        System.out.println(new Employee().toString());
    }
}

你也可以从日志中替换密码字符串,例如

 String maskedPassword = s.replaceAll("password=[^&]*", "password=***");

在您使用球衣时,您可以添加logging filter 进行此类替换。

【讨论】:

    【解决方案2】:

    创建一个名为 MaskedString 的类,它基本上只是 String 的替代品,但有一个不输出实际密码的 toString 方法:

    public class MaskedString(){
        private String maskedString;
    
        MaskedString(){
            maskedString = "";
        }
    
        MaskedString(String string){
            maskedString = string;
        }
    
        public String getActualString(){
            return maskedString;
        }
    
        public String setString(String string){
            maskedString = string;
        }
    
        public String toString(){
            return "Not the actual string!";
        }
    }
    

    【讨论】:

      【解决方案3】:

      如果您使用的是 lombok,请尝试 ToString 的排除选项。

      @Data
      @ToString(exclude = {"password"})
      public class Employee {
          private String username;
          private String password;
          private String city;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-09-07
        • 1970-01-01
        • 2017-12-15
        • 1970-01-01
        • 2019-08-22
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多