我发送的请求包含以下代码:
final WebTarget target = client.target(url);
CustomResponse response = target.request(MediaType.APPLICATION_XML_TYPE)
.post(Entity.xml(password), CustomResponse.class);
身份验证旨在接受用户名作为url
的一部分,而密码则在请求正文中发送。
问题是密码显示在由ClientRequest#writeEntity()
库中的类javax.ws.rs
生成的日志中。
所以,我的问题是如何强制该库不在日志中存储密码而不关闭注销?
谢谢。
答案 0 :(得分:1)
创建自定义official futures example并将其安装在生成java.util.logging.Filter的java.util.logging.Logger上。您可以通过返回false
来省略该日志条目,或者只是重写日志记录的参数或消息,使其不包含密码。
import java.util.logging.Filter;
import java.util.logging.LogRecord;
public class PasswordFilter implements Filter {
@Override
public boolean isLoggable(LogRecord record) {
if (isPasswordCallSite(record)) {
//return false; // omit log entry.
//Or hide password.
Object[] params = record.getParameters();
if (params != null && params.length != 0) {
params = params.clone();
String data = String.valueOf(params[0]);
//Write code to find and replace password.
params[0] = data;
record.setParameters(params);
}
}
return true;
}
private boolean isPasswordCallSite(LogRecord r) {
return "foo.bar.ClientRequest".equals(r.getSourceClassName())
&& "writeEntity".equals(r.getSourceMethodName());
}
}