我正在处理多个敏感值的Java应用程序。我们正在使用Lombok,并且有很多数据类,如下所示。然而,在日志中看到这些类时却没有指示它们包含一些关键字段,这令人困惑,因为生成的toString将100%忽略被排除的字段。有没有可能让Lombok打印类似clientSecret=
/** data we will send to token endpoint */
@Data
public class TokenReq {
private String grantType;
private String code;
private String clientId;
@ToString.Exclude
private String refreshToken;
@ToString.Exclude
private String clientSecret;
private String redirectUri;
}
正如评论中所说,这是我前一段时间所做的,它可能需要更多的工作,但这是一个想法:
interface ToString {
default String innerToString(String... exclusions) {
Method[] allMethods = getClass().getDeclaredMethods();
return Arrays.stream(allMethods)
.filter(x -> x.getName().startsWith("get"))
.map(x -> {
if (Arrays.stream(exclusions).anyMatch(y -> ("get" + y).equalsIgnoreCase(x.getName()))) {
return x.getName().substring(3) + " = <HIDDEN>";
}
try {
return x.getName().substring(3) + " = " + x.invoke(this);
} catch (Exception e) {
throw new RuntimeException(e);
}
})
.collect(Collectors.joining(" "));
}
}
和一个类:
static class Person implements ToString {
private String name;
private String password;
// constructor/getter or lombok annotations
public String toString() {
return innerToString("password");
}
}
然后是用法:
public static void main(String[] args) {
Person p = new Person("eugene", "password");
System.out.println(p);
}
您可以排除应屏蔽的字段,并包括返回屏蔽值的帮助器方法:
@Data
public class TokenReq {
@ToString.Exclude
private String clientSecret;
@ToString.Include(name="clientSecret")
private String hiddenClientSecretForToString() {
return "<HIDDEN>";
}
}
Lombok项目的类注释,ToString,用于在其注释的类内自动生成一个ToString()方法。 对于这个类: 调用生成的toString()方法将生成以下输出: 注释的可选元素可用于包含或排除特定字段,但我想知道的是... 可能类似于:
我希望能够滚动通过整个页面,但没有滚动条显示。 在Google Chrome中是: 但Mozilla Firefox和Internet Explorer似乎不是这样工作的。 我也在CSS中尝试过这个: 这确实隐藏了滚动条,但我不能再滚动了。 有没有一种方法,我可以删除滚动条,同时仍然能够滚动整个页面? 请使用CSS或HTML。
问题内容: 注意:此问题仅供参考。我很想知道这样做有多深入到Python内部。 不久前,在某个问题的内部开始了一个讨论,该问题涉及传递给print语句的字符串是否可以在调用to之后/期间进行修改。例如,考虑以下功能: 现在,当运行时,到终端的输出应显示: 请注意,单词“ cat”已被单词“ dog”代替。某处某种方式能够修改这些内部缓冲区以更改打印的内容。假设这是在没有原始代码作者明确许可的情况下
问题内容: 我想检查浏览器是否仍然存在,如果不存在,那么我想打开一个新的浏览器!网络驱动程序中是否有可用的api来检查浏览器是否仍然存在? 问题答案: 调用后,将driver的值设置为 但是,如果调用,它将驱动程序的值设置为 因此,如果您在调用 driver.quit() 之后检查浏览器窗口,则可以通过以下实现知道。
问题内容: 据我所知,使用旧的JMM来实现懒惰单调的DCL(双重检查锁定)技巧被打破了,但是我坚信它已被新的JMM和volatile字段所修复… 但是,在这篇不错的文章中,这显然已经足够新,足以引用DCL中的新旧JMM和volatile字段,表明它仍然坏了… 我在这里到那里读到它是固定的,然后我发现了这一点……有人可以最后说它是否损坏了? 我的理解是,通过波动性地在关系发生之前保证发生的先兆并有效
我必须从Java打印一个word文档。我可以打开打印出来。但是下面的代码会自动打印它。有没有办法弹出打印对话来选择打印机?如果用户不想打印它,他应该可以取消它。此外,我需要关闭打印后的字。请帮帮我.