2010-06-25 17 views
13

Dosyaları yüklemek için Flash kullanan bir Web uygulamasını Spring/GWT ile donanıyorum.Neden request.getRemoteAddr() içeriğe bağlı olarak ipv4 veya ipv6 değerini döndürür (sorgu veya ajax sorgusu)

GWT ile bir ajax isteği göndermek ve kullanıcı ip adresini almak için çalıştığımda olsun bir ipv4 adresi gibi: 127.0.0.1

ama öyle bir post isteği üzerine flaşlı benim dosyaları karşıya (ve ne zaman aynı web uygulaması) Ben bir IPv6 adresi almak 0: 0: 0: 0: 0: 0: 0:

ServletRequestAttributes att = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); 
att.getRequest().getRemoteAddr(); 

sorun:

1 I kullanıcı ip almak için aynı kodu kullanabilirsiniz Kullanıcının dosya yükleyebildiğinden emin olmak için ip adresini kullanan bir imza kullanıyorum flash ile ding) ve ajax veya Post via flash kullanırken ip adresi değişir.

Sorun nedir ve aynı ip biçimini nasıl edinebilirim?

sayesinde

+0

Kullanıcının hangi IP adresini kullandığını kontrol edemezsiniz, bunun yerine çerezleri deneyin. –

cevap

11

nedeni tarayıcınızda yazın isim hem IPv4 ve IPv6 adresleri olmasıdır. Tarayıcı ipv4 kullanmayı seçer, ipv6'yı kullanmak için flaş seçer. Bu konuda sunucu tarafında yapabileceğiniz hiçbir şey yok (dönüştürmenin yolu yok).
Ancak, DNS'inizi değiştirebilir ve adınızın ipv4 veya ipv6 olmak üzere yalnızca bir adresi olmasını sağlayabilirsiniz. Ayrıca bir ad (localhost) değil, bir literal IP adresi (127.0.0.1) ile bağlayabilirsiniz.

+2

Peki, kullanıcıyı nasıl tanımlayabilirim? Çeşitli ayarları değiştirmesini istemeden. –

+0

(istemci) kullandığınız ana bilgisayar adı nedir? Localhost mu? Gerçek hostname mi? – unbeli

+0

localhost (benim hata ayıkladığım zaman) ve gerçek ana bilgisayar adı (gerçek istemci) –

31

Bu bayrak

-Djava.net.preferIPv4Stack=true 
+0

Bu benim için hile yaptı – RJo

+0

Bu benim için çalışıyor. –

0

sonra IPv6 kullanılmakta olan bir IPv6 adresi almak ile sunucu başlatarak tamir edebiliriz. IPv4 ve IPv6 farklı protokollerdir ve istemci her ikisi de kullanılabilir olduğunda hangisinin kullanılacağını seçer.

İstemcinin IPv4 adresini istiyorsanız, DNS'de IPv6 adresini reklam vermeyerek bunları kullanmaya zorlayabilirsiniz. IPv6'nın artan dağıtımıyla birlikte bu kötü bir fikir olurdu. Her ikisinin de desteklenmesi iyidir, bu yüzden IPv6 kullanan istemcilerle başa çıkmak daha iyidir.