代码之家  ›  专栏  ›  技术社区  ›  Vinod Kumar

在日志记录期间屏蔽Java中的某些字符串属性?

  •  3
  • Vinod Kumar  · 技术社区  · 7 年前

    toString() 方法,这样它就不会在日志中打印。

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

    在类似日志记录的过程中

    在这里的日志中,我试图打印整个对象,这里的员工和我的要求是它 根本不打印屏蔽字段和密码

    3 回复  |  直到 6 年前
        1
  •  4
  •   Ori Marko    7 年前

    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
  •  2
  •   Alexander Krämer    7 年前

    创建一个名为MaskedString的类,该类基本上只是字符串的替代品,但有一个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
  •  1
  •   Vinto    4 年前

    龙目岛 ,尝试ToString的排除选项。

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