2009-12-02 13 views
8

Necesito capturar la dirección IP del cliente en mi aplicación GWT/GAE (Java). Como GAE no es compatible con el conjunto completo de API de java.net, no puedo hacer código como el fragmento a continuación. ¿Alguien puede sugerir una forma confiable de lograr lo mismo?Obtención de la dirección IP del cliente en GWT y Google App Engine

for (final Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
    final NetworkInterface intf = en.nextElement(); 
    for (final Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
     final InetAddress ip = enumIpAddr.nextElement(); 
     if (!ip.isLoopbackAddress() && !ip.isLinkLocalAddress() && !ip.isAnyLocalAddress()) { 
       return ip.getHostAddress().toString(); 
     } 
    } 
} 

Para la versión de Python que uno puede hacer:

os.environ['REMOTE_ADDR'] 

o

String ip = self.request.remote_addr; 

Pero lo que sería un equivalente en Java?

Respuesta

15

OK - lo tengo. En el servlet que debería extenderse RemoteServiceServlet hacer esto:

final String ip = getThreadLocalRequest().getRemoteAddr(); 
6

Si estás detrás de un proxy, por ejemplo, si se utiliza ProxyPass y ProxyPassReverse se puede encontrar útil este:

this.getThreadLocalRequest().getHeader("X-FORWARDED-FOR") 
0

En realidad, si desea la dirección IP, es posible que desee utilizar getRemoteAddr en lugar de getRemoteHost.

String ip = getThreadLocalRequest().getRemoteAddr(); 
String host = getThreadLocalRequest().getRemoteHost(); 
  • getRemoteAddr le da la dirección de protocolo de Internet (IP) del cliente.
  • getRemoteHost le proporciona el nombre completo del cliente, el IP si el nombre de host está vacío.

consulte el Javadoc de Oracle: http://docs.oracle.com/javaee/7/api/javax/servlet/ServletRequest.html#getRemoteAddr%28%29

+0

Eso es lo que muestro en mi propia respuesta aceptada – Bostone

+0

vio que, no significa ser presuntuoso. Solo quería señalar la diferencia entre getRemoteAddr y getRemoteHost. – mlkammer