2016-08-09 2 views
0

У меня есть приложение для загрузки Spring, работающее на Tomcat. Я должен разрешить каждый ip для своей геолокации: города, провинции и страны. Однако иногда я получаю ip-адрес как разделенный запятыми String вместо одного IP-адреса. Например, 1.39.27.224, 8.37.225.221. код для извлечения IP из запроса Http, который я использую:Получение разделенных запятыми ips из заголовка Http

public static String getIp(final HttpServletRequest request) { 
    PreConditions.checkNull(request, "request cannot be null"); 
    String ip = request.getHeader("X-FORWARDED-FOR"); 
    if (!StringUtils.hasText(ip)) { 
     ip = request.getRemoteAddr(); 
    } 
    return ip; 
} 

ответ

2

X-Forwarded-For может быть использован для идентификации отправляющая IP-адрес клиента, который подключается к веб-серверу через HTTP-прокси или балансировки нагрузки.

Общий формат этого поля является

X-Forwarded-For: client, proxy1, proxy2 

В приведенном выше примере вы можете увидеть, что запрос передается через Proxy1 и Proxy2.

В вашем случае вы должны разобрать эту запятую и прочитать первое значение, которое является IP-адресом клиента.

Предупреждение! Легко подделать поле X-Forwarded-For, чтобы получить неверную информацию.

Пожалуйста, взгляните на https://en.wikipedia.org/wiki/X-Forwarded-For, чтобы узнать больше об этом.

Смежные вопросы