2010-06-25 19 views
13

Tengo una aplicación web con Spring/GWT que usa Flash para cargar archivos.Por qué request.getRemoteAddr() devuelve ipv4 o ipv6 según el contexto (consulta posterior o consulta ajax)

Cuando envío una petición AJAX con GWT y tratar de obtener la dirección IP del usuario, consigo una dirección IPv4 como: 127.0.0.1

pero cuando subo mis archivos con flash (y por lo tanto una solicitud posterior en la misma aplicación de web) consigo una dirección IPv6 0: 0: 0: 0: 0: 0: 0: 1

Puedo utilizar el mismo código para obtener la IP del usuario, que es:

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

el problema es que utilizo una firma que usa la dirección IP para asegurarme de que el usuario pueda cargar archivos (debido a un error con la sesión perdida cuando uploa ding con flash) y la dirección IP cambia cuando uso ajax o Post vía flash.

¿Cuál es el problema y cómo puedo obtener el mismo formato de IP?

gracias

+0

No puede controlar la dirección IP que usa el usuario; pruebe las cookies. –

Respuesta

11

La razón es que el nombre que escriba en su navegador tiene ambas direcciones IPv4 e IPv6. El navegador elige usar ipv4, flash elige usar ipv6. No hay nada que pueda hacer al respecto en el lado del servidor (no hay forma de convertir).
Sin embargo, puede cambiar su DNS y hacer que su nombre tenga solo una dirección, ya sea ipv4 o ipv6. También puede conectarse con una dirección IP literal (127.0.0.1), no con un nombre (localhost).

+2

Entonces, ¿cómo puedo identificar al usuario? Sin pedirle que cambie varios ajustes. –

+0

¿cuál es el nombre de host que usted (cliente) usa? ¿Es localhost? ¿Es un nombre de host real? – unbeli

+0

localhost (para mí cuando depuro) y nombre de host real (cliente real) –

31

Puede fijarlo al iniciar el servidor con esta bandera

-Djava.net.preferIPv4Stack=true 
+0

Esto hizo el truco para mí – RJo

+0

Esto funciona para mí. –

0

se obtiene una dirección IPv6 a continuación, IPv6 está siendo utilizado. IPv4 e IPv6 son protocolos diferentes, y el cliente elige cuál usar cuando ambos están disponibles.

Si desea la dirección IPv4 del cliente, puede obligarlos a usarla al no anunciar la dirección IPv6 en DNS. Sin embargo, eso sería una mala idea con el despliegue creciente de IPv6. El soporte de ambos es bueno, por lo que es mejor tratar con clientes que usan IPv6.

Cuestiones relacionadas