10

打开调试日志记录时,Apache httpclient 似乎以明文形式记录密码。

有没有办法禁用它?这样我就可以看到其余的调试日志,但看不到凭据?

4

2 回答 2

7

在将密码发送到网络之前,在内存中创建密码的 SHA1 哈希。

MessageDigest md = MessageDigest.getInstance("SHA-1");
byte[] sha1hash = new byte[40];
md.update(text.getBytes("UTF-8"), 0, text.length()); // TODO verify the lengths are the same
sha1hash = md.digest();

http://www.mkyong.com/java/java-sha-hashing-example/

如果您绝对需要明文密码,您有多种选择:

  1. 您可以禁用标头的日志记录或将其设置为高于调试的级别:禁用 HttpClient 日志记录

  2. 您可以在发送密码之前动态禁用日志记录,然后再次将其重新打开:动态配置 Apache Http 客户端

  3. 您可以实现自己的 Logger 处理程序/格式化程序或基本处理程序之一的子类,并在输出中搜索您的密码并将其替换为XXXXXXXXX. 然后将处理程序设置为您的类:https ://hc.apache.org/httpcomponents-client-ga/logging.html

于 2013-11-02T01:42:02.250 回答
0

在 log4j.properties 集中

log4j.logger.httpclient.wire.level=WARN

于 2013-11-08T02:04:35.240 回答