如何在Web Start应用程序中设置Java DNS解析器缓存TTL?

时间:2011-05-26 15:11:37

标签: java dns java-web-start

我能够告诉Java DNS解析器不要像这样缓存:

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

当程序直接从JRE运行时,这很好用,但是,从Web Start运行时,此设置似乎被忽略,并且它会永远缓存。我没有得到SecurityException。

但是,如果我将安全管理器设置为null,则该设置将在Web Start中起作用:

System.setSecurityManager(null);

有没有人知道在不关闭安全管理器的情况下在Web Start中启用此属性的方法?此外,如果你能够更清楚地了解正在发生的事情,我会很感激。

2 个答案:

答案 0 :(得分:2)

简单的答案是sun.net.InetAddressCachePolicy仅在静态{}初始化程序中初始化一次,并考虑到您指定的属性。 Webstart加载器显然使用了类,因此它不会占用您的价值。

但是,由于可能未初始化该属性,因此您可以使用InetAddressCachePolicy.setIfNotSet(InetAddressCachePolicy.NEVER)

或者,有一个系统属性要添加到jnlp: < property name =" com.sun.net.inetaddr.ttl"值=" 0" />

如果webstart已经指定(尚未测试),则您只能通过反射Field f= InetAddressCachePolicy.getDeclaredField("cachePolicy"); f.setAccessible(true); f.setInt(0); 进行操作,这可能会或可能不起作用。

祝你好运和快乐的黑客攻击!

答案 1 :(得分:1)

你是用javaws运行吗?如果你是,你试过吗

javaws -J-Dnetworkaddress.cache.ttl=0 yourapp.jnlp