【问题标题】:How to set Java DNS resolver cache TTL in Web Start application?如何在 Web Start 应用程序中设置 Java DNS 解析器缓存 TTL?
【发布时间】:2011-05-26 15:11:36
【问题描述】:

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

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

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

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

System.setSecurityManager(null);

有人知道在不关闭安全管理器的情况下在 Web Start 中启用此属性的方法吗?另外,如果您能简单地了解正在发生的事情,我将不胜感激。

【问题讨论】:

  • 请注意,为了执行同源策略,必须固定 DNS 映射。

标签: java dns java-web-start


【解决方案1】:

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

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

另外还有一个系统属性要添加到 jnlp:

如果 webstart 已经指定了它(尚未测试),您只能通过反射Field f= InetAddressCachePolicy.getDeclaredField("cachePolicy"); f.setAccessible(true); f.setInt(0); 进行黑客攻击这可能有效,也可能无效。

祝你好运,黑客愉快!

【讨论】:

  • 我还没有对此进行测试,但是由于您至少给了我更多信息,因此您将获得赏金。谢谢。
  • @Marcus,该信息应该对 Java6(或 7)有效,因为您使用的是 webstart,我假设是 Java6。
【解决方案2】:

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

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

【讨论】:

  • 这是一种安全属性,而不是系统属性。此外,设置属性不是问题。它被忽略了。谢谢。
猜你喜欢
  • 2012-08-19
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-02
  • 2017-08-06
  • 2010-12-03
相关资源
最近更新 更多