Получение IP-адреса клиентов в GWT и Google App Engine

Мне нужно захватить IP-адрес клиента в моем приложении GWT/GAE (Java). Поскольку GAE не поддерживает полный набор API-интерфейсов java.net, я не могу выполнить код, подобный фрагменту ниже. Может ли кто-нибудь предложить надежный способ достижения того же?

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();
        }
    }
}

Для версии Python можно сделать:

os.environ['REMOTE_ADDR'] 

or

String ip = self.request.remote_addr;

Но что было бы эквивалентом Java?


person Bostone    schedule 02.12.2009    source источник


Ответы (3)


Хорошо понял. В вашем сервлете, который должен расширять RemoteServiceServlet, сделайте следующее:

final String ip = getThreadLocalRequest().getRemoteAddr();
person Bostone    schedule 03.12.2009

Если вы находитесь за прокси, например, если вы используете ProxyPass и ProxyPassReverse, вам может пригодиться это:

this.getThreadLocalRequest().getHeader("X-FORWARDED-FOR") 
person amanas    schedule 23.04.2011

На самом деле, если вам нужен IP-адрес, вы можете использовать getRemoteAddr вместо getRemoteHost.

String ip   = getThreadLocalRequest().getRemoteAddr();
String host = getThreadLocalRequest().getRemoteHost();
  • getRemoteAddr предоставляет вам адрес интернет-протокола (IP) клиента.
  • getRemoteHost дает вам полное имя клиента, IP-адрес, если имя хоста пусто.

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

person mlkammer    schedule 21.06.2013
comment
Видел это, не хотел быть самонадеянным. Просто хотел указать на разницу между getRemoteAddr и getRemoteHost. - person mlkammer; 06.08.2013