2013-09-27 24 views
16

gelen IP adresini almak için, ancak IP orada gibi görünüyor:nasıl geliyor başlıklarını bakıyorum Sprey çerçevesinde

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) 

Bu benim tarayıcıdan yaptığı bir taleptir. Temel olarak bakıyorum:

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

İstek üzerine nesne ürünün IP adresi hakkında herhangi bir bilgi yok. Herhangi bir yardım çok takdir edilir. Teşekkürler.

cevap

15

Eğer sprey yönlendirme kullanarak, o zaman kullanmak için) = clientIP denilen istemci ip ayıklanması için bir yönerge var sadece yazmak:

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

fazla, ama yine de gerek açık eklemem gerekiyor istekten IP almak için yapılandırma. Ve küçük bir yorum, belki bir şey alamadım ama sprey içinde implicit request yoktur. Aslında gelen istek, yönlendirme yapınızın içinden geçiyor, eğer yönlendirme kütüphanesine bir göz atıyorsanız, bu rotanın sadece bir takma ad olduğunu göreceksiniz: type Route = RequestContext => Unit.

Fakat statik rota parçası ve dinamik bölümü hakkında unutmayın: Eğer bir noktada bağlamda erişmek gerekiyorsa, sadece yazma Yani.

+2

Bu iyi bir yol, ancak aşağıda benim cevabım da çok alakalı. Aslında benim için asıl sorun buydu. –

28

Sorun yapılandırmadaydı, bu iyi belgelenmiyor. Bu ekleme:

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

kuvvetler ana başlıklarına uzak IP başlığını eklemek sprey. Adres başlığı Uzak Adrese sahip olacaktır.

+2

Evet, haklısınız, şu anda belgelenmemiş. ClientIp yönergesini belgeledikten sonra tam olarak bu belgeleri içerecektir. Üzgünüm, zor yolu bulmak zorundaydın. – jrudolph

+0

@jrudolph Sprey Servlet ile çalışır mı? – expert

+0

@jrudolph Hala eksik. http://spray.io/documentation/1.1.3/spray-routing/misc-directives/clientIP/#description 2 yıl, baskı yok. – flavian