2013-09-27 33 views
16

传入的IP地址,我在看那些进来的头,但没有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 
     } 
     } 
    } ~ 

这里请求对象没有任何关于IP地址的信息。任何帮助非常感谢。谢谢。

回答

15

如果使用喷雾路由,再有就是用于提取客户端IP一个指令称为clientIP =) 要使用它只是写:

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

更多然后简单,但你需要仍然需要增加明确配置从请求中获取IP。还有一点点评论,也许我没有得到什么,但在喷雾没有implicit request。实际上,传入的请求通过您的路由结构渗透,如果您查看路由库,您会看到该路由仅仅是一个别名:type Route = RequestContext => Unit。所以,如果你需要获得访问在一些点情况下只写:

但是记住静态路由部分和动态部分。

+2

这是一个好方法,但是我的回答也非常相关。这实际上是我的主要问题。 –

28

问题出在配置上,这没有很好的记录。添加此项:

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

强制喷洒将远程IP标头添加到主标头。地址标题将具有名称远程地址。

+2

是的,你是对的,它目前没有记录。一旦我们开始记录clientIp指令,它将包含该文档。对不起,你必须找出困难的方式。 – jrudolph

+0

@jrudolph它是否适用于Spray Servlet? – expert

+0

@jrudolph仍然缺少。 http://spray.io/documentation/1.1.3/spray-routing/misc-directives/clientIP/#description 2年,没有压力。 – flavian