В JSP метод получения IP -адреса клиента: request.getRemoteaddr (), который в большинстве случаев действителен. Однако после прохождения Apache, Squid и другого программного обеспечения для обратного прокси вы не можете получить реальный IP -адрес клиента. Если используется программное обеспечение для обратного прокси, IP -адрес, полученный с использованием метода request.getRemoteAddr (): 127.0.0.1 или 192.168.1.110, а не реальный IP клиента.
После передачи прокси, поскольку между клиентом и службой добавляется промежуточный уровень, сервер не может напрямую получить IP-адрес клиента, а приложение на стороне сервера не может напрямую вернуться к клиенту по адресу пересылки. Однако в информации HTTP-заголовка для пересылки запроса добавляется информация о X-Forwarded-для. Используется для отслеживания исходного IP -адреса клиента и адресу сервера, запрошенного исходным клиентом. Когда мы получаем доступ к index.jsp/, не то, чтобы наш браузер фактически обращается к файлу index.jsp на сервере. Вместо этого прокси -сервер сначала обращается к индексу. JSP, а прокси -сервер возвращает доступ к нашему браузере. Поскольку прокси -сервер обращается к индексу.
Следовательно, можно получить метод получения реального IP -адреса клиента:
public String getRemortip (httpservlectrequest) {if (request.getheader ("x-forwarded-for") == null) {return request.getRemoteaddr (); } return request.getheader ("x-forwarded-for"); }Метод 2 для получения реального IP -адреса клиента:
public String getipaddr (httpservletrequest) {string ip = request.getheader ("x-forwarded-for"); if (ip == null || ip.length () == 0 || "Неизвестно" .EqualSignoreCase (ip)) {ip = request.getheader ("proxy-client-ip"); } if (ip == null || ip.length () == 0 || "Неизвестно" .EqualSignoreCase (ip)) {ip = request.getheader ("wl-proxy-client-ip"); } if (ip == null || ip.length () == 0 || "Неизвестно" .EqualSignoreCase (ip)) {ip = request.getRemoteAddr (); } return ip; }Однако, если прокси-многоуровневый обратный прокси-сервер, существует более одного значения X-Forwarded-For, но серию значений IP. Какой из них является настоящим IP реальной пользовательской стороны?
Ответ состоит в том, чтобы взять первую непреодолимую допустимую IP-строку в X-Forwarded-For. нравиться:
X-Forwarded-For: 192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100
Настоящий IP пользователя: 192.168.1.110