2012-03-14 12 views
24

Mentre questo sembra sciocco, non sono stato in grado di trovare un modo per ottenere l'IP del client in Play 2.0. Era disponibile in 1.2.x come Http.Request.remoteAddress, ma 2.0 (ho controllato principalmente l'API Scala, ma ho fatto anche un rapido controllo di quello Java) sembra solo fornire informazioni sul lato server della richiesta in. C'è qualcosa che mi manca? Il trucco più vicino che mi viene in mente in questo momento è configurarlo dietro un proxy inverso e quindi controllare X-Forwarded-For, ma questo non funziona troppo bene in dev.Come ottenere l'IP del client?

+0

Salve, se hai una richiesta Http, hai provato a usare un trucco con 'play.api.http.HeaderNames.FROM'e l'intestazione della richiesta probabilmente puoi ottenere in qualche modo? –

+0

Da -L'indirizzo email dell'utente che ha effettuato la richiesta. Non sono sicuro se questo funzionerà –

risposta

13

EDIT: Tornando a questa risposta, questo è stato aggiunto nel play framework 2.0.2: vedi comunicato annuncio sul https://groups.google.com/forum/#!msg/play-framework/Z97GQ2VnR5M/T-STGaeuN68J%5B1-25%5D e soprattutto la documentazione delle API a http://www.playframework.org/documentation/api/2.0.2/scala/index.html#play.api.mvc.Request

come si può vedere non v'è ora il supporto per Request.remoteAddress

originale:

V'è attualmente un bug aperto per questo in inseguitore: https://play.lighthouseapp.com/projects/82401/tickets/256-add-back-requestheaderremoteaddress

Penso che l'hacking delle librerie di play2.0 per includere la patch collegata sia attualmente la scelta migliore. Probabilmente è ancora più pulito che usare un proxy con l'unico scopo di aggiungere intestazioni XFF e usarle per determinare l'IP.

+2

In realtà, l'ho pubblicato, e io sono quello che ha realizzato quella patch. –

+1

Penso che ormai possiamo tranquillamente supporre che questo sia stato un "Oops" della squadra di Play. Peccato che nessuno l'abbia notato prima della 2.0 finale. Forse il bugreport andrà ancora 'no, puoi farlo facilmente in un altro modo'. Ma ne dubito. – Martijn

+0

sì, quello era anche il mio pensiero, dopo essere stato incapace di trovarlo. Tale sensazione è stata poi rafforzata dalla risposta di Olivier che fa riferimento a http://www.playframework.org/documentation/2.0/HTTPServer che in realtà fa riferimento a request.remoteAddress (anche se in realtà non esiste). –

7

prega di controllare questo progetto Github a https://github.com/orefalo/play2-xforward

ho preso il codice da Play1 e portato a Play2, dovrebbe funzionare lo stesso.

ancora un work in progress ...

+0

No, è _your_ domain/ip. –

+0

sei sicuro? viene letto come tale 'lazy val host: String = headers.get (play.api.http.HeaderNames.HOST) .getOrElse (" ")' mi sembra mentre viene letto dalla richiesta. Non può essere l'IP/dominio locale. Ora se leggi il post, spiega come preservare l'host originale con un 'ProxyPreserveHost On' –

+5

btw, grazie per il -1 cercando di risolvere il tuo problema! –

Problemi correlati