加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在Scala Play中设置DNS查找的TimeToLive

发布时间:2020-12-16 19:05:08 所属栏目:安全 来源:网络整理
导读:我正在尝试在我的 Scala-Play应用程序中设置DNS查找的TimeToLive设置.我使用Play 2.5.9和Scala 2.11.8并按照 the AWS guide.我尝试了以下方式: 在application.conf中 // Set DNS lookup time-to-live to one minutenetworkaddress.cache.ttl=1networkaddres
我正在尝试在我的 Scala-Play应用程序中设置DNS查找的TimeToLive设置.我使用Play 2.5.9和Scala 2.11.8并按照 the AWS guide.我尝试了以下方式:

>在application.conf中

// Set DNS lookup time-to-live to one minute
networkaddress.cache.ttl=1
networkaddress.cache.negative.ttl=1

>在AppModule或EagerSingleton(代码将是类似的)

class AppModule() extends AbstractModule {
  Security.setProperty("networkaddress.cache.ttl","1")
  Security.setProperty("networkaddress.cache.negative.ttl","1")
  ...
}

>传递为环境变量:

sbt -Dsun.net.inetaddr.ttl=1 clean run

我在应用程序中有以下测试代码:

for (i <- 1 to 25) {
  System.out.println(java.net.InetAddress.getByName("google.com").getHostAddress())
  Thread.sleep(1000)
}

这总是打印相同的IP地址,例如216.58.212.206.对我来说,看起来没有上述方法有任何效果.但是,也许我正在测试其他的东西,而不是TTL的价值.所以我有两个问题:

>将安全变量传递到Play应用程序的正确方法是什么?
>如何测试?

解决方法

要通过java.security.Security更改DNS缓存的设置,您必须提供一个自定义应用程序加载程序.

package modules
class ApplicationLoader extends GuiceApplicationLoader {
  override protected def builder(context: Context): GuiceApplicationBuilder = {
    java.security.Security.setProperty("networkaddress.cache.ttl","1")
    super.builder(context)
  }
}

构建此应用程序加载器时,可以在application.conf中启用它

play.application.loader = "modules.ApplicationLoader"

之后,您可以使用上面的代码,并检查DNS缓存的行为是否像您设置的那样.但请记住,您的系统正在访问缓存本身的DNS服务器,以便您不会看到更改.
如果您想确保您为google.com获得不同的地址,那么您应该使用像ns1.google.com这样的授权名称服务器

如果你想写一个测试,你可以写一个测试,请求地址,然后等待指定的时间,直到它再次解决.但是,如果您使用DNS系统控制,如google.com,这可能是一个问题,如果您使用缓存打DNS服务器.
如果你想写这样的支票,你可以做到这一点

@RunWith(classOf[JUnitRunner])
class DnsTests extends FlatSpec with Matchers {

  "DNS Cache ttl" should "refresh after 1 second" 
    in new WithApplicationLoader(new moduels.ApplicationLoader) {

    // put your test code here

  }
}

您可以看到,您可以将自定义应用程序加载器放在您的测试背后的应用程序的上下文中.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读