Получение IP-адреса клиентов в GWT и Google App Engine - PullRequest
8 голосов
/ 03 декабря 2009

Мне нужно захватить 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'] 

или

String ip = self.request.remote_addr;

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

Ответы [ 3 ]

15 голосов
/ 03 декабря 2009

ОК - понял. В вашем сервлете, который должен расширяться RemoteServiceServlet, сделайте это:

final String ip = getThreadLocalRequest().getRemoteAddr();
6 голосов
/ 23 апреля 2011

Если вы находитесь за прокси-сервером, например, если вы используете ProxyPass и ProxyPassReverse, вы можете найти следующее:

this.getThreadLocalRequest().getHeader("X-FORWARDED-FOR") 
0 голосов
/ 21 июня 2013

На самом деле, если вам нужен 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...