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

问题描述

| 我能够告诉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