我能够告诉Java DNS解析器不要像这样缓存:
java.security.Security.setProperty("networkaddress.cache.ttl", "0");
当直接从JRE直接运行程序时,此方法很好用,但是,从Web Start运行时,此设置似乎会被忽略,并且会永久缓存。我没有收到SecurityException。
但是,如果将安全管理器设置为null,则该设置将在Web Start中起作用:
System.setSecurityManager(null);
没有人知道在不关闭安全管理器的情况下在Web Start中启用此属性的方法吗?另外,如果您可以简单地了解正在发生的事情,我将不胜感激。
最佳答案
简单的答案是,考虑到您指定的属性,sun.net.InetAddressCachePolicy
在static {}初始化程序中仅初始化一次。 Webstart加载程序显然使用该类,因此它不会占用您的价值。
但是,由于该属性可能未初始化,因此可以使用InetAddressCachePolicy.setIfNotSet(InetAddressCachePolicy.NEVER)
。
或者,可以将系统属性添加到jnlp中:
如果Webstart已指定它(未经测试),则只能通过反射Field f= InetAddressCachePolicy.getDeclaredField("cachePolicy"); f.setAccessible(true); f.setInt(0);
进行黑客入侵,该反射可能无效,也可能无效。
祝你好运,黑客入侵愉快!