2013-09-27 32 views
16

szukam w nagłówkach, które są w najbliższych, ale nie IP wydaje się tam być:Jak uzyskać adres IP przychodzącego w aerozolu ramach

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) 

Jest to prośba zrobiłem z przeglądarką. Zasadniczo szukam w:

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

Tutaj zwrócić obiekt nie posiada żadnych informacji na temat adresu IP. Każda pomoc jest bardzo doceniana. dzięki.

Odpowiedz

15

Jeśli używasz routingu sprayu, to nie jest dyrektywa ekstrakcji IP klienta nazywa clientIP =) Aby z niej skorzystać wystarczy napisać:

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

więcej niż proste, ale trzeba jeszcze trzeba dodać jawne konfiguracja, aby uzyskać IP z żądania. I mały komentarz, może nie dostałem czegoś, ale w sprayu nie ma implicit request. Faktycznie żądanie przychodzące jest przełączane przez twoją strukturę routingu, jeśli zajrzysz do biblioteki routingu, zobaczysz, że trasa to tylko alias: type Route = RequestContext => Unit. Więc jeśli chcesz uzyskać dostęp do kontekstu w pewnym momencie, po prostu napisz:

Pamiętaj jednak o statycznej części trasy i części dynamicznej.

+2

To dobry sposób, jednak moja odpowiedź poniżej jest bardzo istotna. To był dla mnie główny problem. –

28

Problem był w konfiguracji, to nie jest dobrze udokumentowane. Dodanie tego:

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

wymusza natryskiwanie, aby dodać zdalny nagłówek IP do nagłówków głównych. Nagłówek adresu będzie miał nazwę Adres zdalny.

+2

Tak, masz rację, obecnie nie udokumentowano. Kiedy już dojdziemy do dokumentowania dyrektywy clientIp, będzie ona zawierała dokładnie tę dokumentację. Przepraszam, że musiałeś się natrudzić. – jrudolph

+0

@jrudolph Czy to działa z Spray Servlet? – expert

+0

@jrudolph Wciąż brakuje. http://spray.io/documentation/1.1.3/spray-routing/misc-directives/clientIP/#description 2 lata, bez presji. – flavian