3

对于调试,我想要一种方法来发现,对于给定时刻正在运行的 JVM,java.security.Security类中维护的所有属性的所有名称和所有值。

我从研究 API 规范和Java Cryptography Architecture Guide中学到了一些东西......

如果我知道属性的名称,我可以使用getProperty找到它的当前值。但我不知道如何发现所有的名字。

属性的初始设置可以在配置文件中进行,但稍后可以使用setProperty动态添加和更改设置。我对当前设置感兴趣,这不一定是初始设置。

感谢您的任何指导!

4

2 回答 2

4

setProperty并且getProperty都操纵内部props场。您可以使用反射 API 访问它。将此严格用作调试的一次性代码!永远不应该进入生产代码。

Field f = Security.class.getDeclaredField("props");
f.setAccessible(true);
Properties allProps = (Properties) f.get(null); // Static field, so null object.
System.out.println(allProps); //Or iterate over elements()/propertyNames() and print them individually
于 2018-05-18T17:48:10.740 回答
0

使用Security类:

String certDisabled = Security.getProperty("jdk.certpath.disabledAlgorithms");
String tlsDisabled= Security.getProperty("jdk.tls.disabledAlgorithms");
于 2021-05-31T19:58:09.713 回答