2013-09-27 38 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