Почему request.getRemoteAddr () возвращает ipv4 или ipv6 в зависимости от контекста (пост-запрос или ajax-запрос) - PullRequest
20 голосов
/ 25 июня 2010

У меня нет веб-приложения с Spring / GWT, которое использует Flash для загрузки файлов.

Когда я отправляю запрос ajax с GWT и пытаюсь получить IP-адрес пользователя, я получаю адрес IPv4, например: 127.0.0.1

, но когда я загружаю свои файлы с помощью флэш-памяти (и, таким образом, почтового запроса в том же веб-приложении), я получаю адрес ipv6 0: 0: 0: 0: 0: 0: 0: 1

Я использую тот же код, чтобы получить IP-адрес пользователя:

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

Проблема заключается в том, что я использую подпись, которая использует IP-адрес, чтобы быть уверенным, что пользователь может загружать файлы (из-заошибка с сеансом, потерянным при загрузке с помощью flash), и IP-адрес меняется, когда я использую ajax или Post через flash.

В чем проблема и как я могу получить тот же формат ip?

спасибо

Ответы [ 3 ]

42 голосов
/ 21 февраля 2014

Вы можете исправить это, запустив сервер с этим флагом

-Djava.net.preferIPv4Stack=true
11 голосов
/ 25 июня 2010

Причина в том, что имя, которое вы вводите в браузере, имеет адреса ipv4 и ipv6.Браузер выбирает использовать ipv4, Flash выбирает использовать ipv6.На стороне сервера вы ничего не можете с этим поделать (нет возможности конвертировать).
Однако вы можете изменить свой DNS и сделать так, чтобы у вашего имени был только один адрес, ipv4 или ipv6.Вы также можете подключиться с буквальным IP-адресом (127.0.0.1), а не с именем (localhost).

0 голосов
/ 01 декабря 2014

вы получаете адрес IPv6, а затем используется IPv6. IPv4 и IPv6 - это разные протоколы, и клиент выбирает, какой из них использовать, когда оба доступны.

Если вам нужен IPv4-адрес клиента, вы можете заставить его использовать его, не объявляя IPv6-адрес в DNS. Это было бы плохой идеей, хотя с ростом развертывания IPv6. Поддерживать оба хорошо, поэтому лучше иметь дело с клиентами, использующими IPv6.

...