Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: BostoneОтветов: 3

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

javagoogle-app-enginegwt

Ответы

Ответ 1 · рейтинг 15 · Bostone

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

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

Ответ 2 · рейтинг 6 · amanas

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

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

Ответ 3 · mlkammer

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы