2013-09-27 14 views
16

Sto guardando le intestazioni che stanno arrivando, ma nessun IP sembra di essere lì:Come ottenere l'indirizzo IP in arrivo in Spray quadro

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) 

Questa è una richiesta che ho fatto dal browser. Fondamentalmente sto cercando in:

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

Qui oggetto di richiesta non ha alcuna informazione circa l'indirizzo IP. Qualsiasi aiuto è bene accetto. Grazie.

risposta

15

Se si utilizza a spruzzo di routing, poi c'è una direttiva per l'estrazione IP del client chiamato clientIP =) Per utilizzarlo basta scrivere:

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

più di semplice, ma è necessario ancora bisogno di aggiungere esplicito configurazione per ottenere l'IP dalla richiesta. E un piccolo commento, forse non ho ottenuto qualcosa ma nello spray non c'è lo implicit request. In realtà richiesta in arrivo filtra attraverso la struttura di routing, se si dà un'occhiata nella libreria di routing vedrete che percorso è solo un alias: type Route = RequestContext => Unit. Quindi, se hai bisogno di accedere al contesto, ad un certo punto scrivi:

Ma ricorda la parte del percorso statico e la parte dinamica.

+2

Questo è un buon modo, tuttavia la mia risposta qui sotto è anche molto rilevante. Questo era in realtà il problema principale per me. –

28

Il problema era in configurazione, questo non è documentato bene. Aggiunta di questo:

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

forza lo spruzzo per aggiungere l'intestazione IP remota alle intestazioni principali. L'intestazione dell'indirizzo avrà il nome Remote-Address.

+2

Sì, hai ragione, è attualmente underdocumented. Una volta che avremo modo di documentare la direttiva clientIp, conterrà esattamente quella documentazione. Scusa, hai dovuto scoprirlo nel modo più duro. – jrudolph

+0

@jrudolph Funziona con Spray Servlet? – expert

+0

@jrudolph Manca ancora. http://spray.io/documentation/1.1.3/spray-routing/misc-directives/clientIP/#description 2 anni, nessuna pressione. – flavian

Problemi correlati