如何在SPAIN框架中获取传入IP地址?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

我正在查看即将到来的标题,但似乎没有IP:

HttpRequest(GET,http://127.0.0.1:8080/track/check,List(Accept-Language: uk-UA, 
uk, ru, en-US, en, Encoding: gzip, deflate, sdch, User-Agent: Mozilla/5.0 
(Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29
Safari/537.36, Accept: text/html, application/xhtml+xml, application/xml;q=0.9, 
*/*;q=0.8, Connection: keep-alive, Host: 127.0.0.1:8080),EmptyEntity,HTTP/1.1)

这是我从浏览器中发出的请求。基本上我在看:

path("check") {
       get {
         implicit request => {
           val a = 5
         }
       }
     } ~

这里,Request对象没有关于IP地址的任何信息。任何帮助都是非常感谢的。谢谢。

提问于
用户回答回答于

有一个解压缩客户端ip的指令叫clientIP= =要使用它只需写:

(path("somepath") & get) {
  clientIP { ip =>
    complete(s"ip is $ip")
  }
}

但仍然需要添加显式配置以从请求获取IP。

实际上,传入的请求通过你的路由结构渗透,如果你看看路由库,你会看到这个路由只是一个别名:type Route = RequestContext => Unit。所以如果你需要在某个时候访问上下文,只需写下:

(path("somepath") & get) {
  clientIP { ip => 
    reqCont => reqCont.complete(s"ip is $ip")
  }
}

但请记住关于静态路由部分和动态部分。

用户回答回答于

问题是在配置中,这没有得到很好的记录。补充如下:

# spray-can config
spray.can {
  server {
    remote-address-header = on
  }
}

扫码关注云+社区