我能够告诉Java DNS解析器不要像这样缓存:
java.security.Security.setProperty("networkaddress.cache.ttl", "0");
当程序直接从JRE运行时,这很好用,但是,从Web Start运行时,此设置似乎被忽略,并且它会永远缓存。我没有得到SecurityException。
但是,如果我将安全管理器设置为null,则该设置将在Web Start中起作用:
System.setSecurityManager(null);
有没有人知道在不关闭安全管理器的情况下在Web Start中启用此属性的方法?此外,如果你能够更清楚地了解正在发生的事情,我会很感激。
答案 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