java 如何获取和设置networkaddress.cache.ttl的值

dl5txlt9  于 2023-01-29  发布在  Java
关注(0)|答案(2)|浏览(187)

我有一个在alpine容器中运行的java应用程序,我想找到一个可靠的方法来确定networkaddress.cache.ttl的值是什么,我尝试在应用程序的代码中使用这个:java.security.Security.getProperty("networkaddress.cache.ttl");,但它总是返回null,即使我在JAVA_OPTS参数中使用-Dnetworkaddress.cache.ttl=30。所以我显然做错了什么,但我不知道是什么。根据这个networkaddress.cache.ttl null in openjdk,我甚至不需要在JAVA_OPTS中添加参数,因为默认值是30。查看容器内部的/usr/local/openjdk-8/jre/lib/security/java.security,我可以看到#networkaddress.cache.ttl=-1,但它被注解掉了。所以我不知道默认值是什么,那么我怎么才能可靠地检查networkaddress.cache.ttl的值是什么呢?

g6ll5ycj

g6ll5ycj1#

由于我不知道的原因,-Dnetworkaddress.cache.ttl=30无法设置任何内容。我设法通过将其添加到我的Dockerfile来设置它

sed -i '313,313 s/^#//' /usr/lib/jvm/zulu8-ca/jre/lib/security/java.security
sed -i '313,313 s/-1/30/' /usr/lib/jvm/zulu8-ca/jre/lib/security/java.security

here描述了另一种方法,其思想是使用另一个文件覆盖security属性,这两种方法对我来说都很好用。

mzmfm0qo

mzmfm0qo2#

According to the [JDK 11 docs](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/net/doc-files/net-properties.html):

因为这两个属性是安全策略的一部分,所以它们不是由-D选项或System.setProperty()API设置的,而是作为安全属性设置的。
note from AWS Java SDK使用SecurityProperty而不是SystemProperty,如下所示:

java.security.Security.setProperty("networkaddress.cache.ttl" , "60");

这样你就可以

String ttl = java.security.Security.getProperty("networkaddress.cache.ttl");

相关问题