问题描述
|
我能够告诉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中:
<属性名称= \“ com.sun.net.inetaddr.ttl \”值= \“ 0 \” />
如果webstart已指定它(未经测试),则只能通过反射Field f= InetAddressCachePolicy.getDeclaredField(\"cachePolicy\"); f.setAccessible(true); f.setInt(0);
进行黑客入侵,该反射可能有效也可能无效。
祝你好运,黑客入侵愉快!
,您正在使用javaws运行它吗?如果是,您是否尝试过
javaws -J-Dnetworkaddress.cache.ttl=0 yourapp.jnlp