Java Spring - захватить IP-адрес запрашивающего в классе Controller - PullRequest
0 голосов
/ 11 марта 2019

У меня есть приложение Java Spring, которое использует веб-сервис на основе REST.У этой службы есть конечная точка, которая должна захватывать IP-адрес запроса и отправлять его в мой JSP для сбора некоторой информации.Я перепробовал все методы от SO, и мне всегда кажется, что я получаю один и тот же результат - IP-адрес хост-сервера.Соответствующий класс Java:

private static final String[] IP_HEADER_CANDIDATES = {
        "X-Forwarded-For",
        "Proxy-Client-IP",
        "WL-Proxy-Client-IP",
        "HTTP_X_FORWARDED_FOR",
        "HTTP_X_FORWARDED",
        "HTTP_X_CLUSTER_CLIENT_IP",
        "HTTP_CLIENT_IP",
        "HTTP_FORWARDED_FOR",
        "HTTP_FORWARDED",
        "HTTP_VIA",
        "REMOTE_ADDR" };

public void doStuff(HttpServletRequest servletRequest, ...) {

    //...
    String ipAddress = getClientIpAddress(servletRequest);
    servletRequest.setAttribute("ip", ipAddress);
    //...

 }

 public static String getClientIpAddress(HttpServletRequest request) {
    for (String header : IP_HEADER_CANDIDATES) {
        String ip = request.getHeader(header);
        if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
            return ip;
        }
    }
    return request.getRemoteAddr();
}

Когда я пересылаю свой JSP и вызываю console.log("${ip}");, я всегда вижу IP-адрес докера, на котором запущено мое приложение (в основном localhost).Когда я развернул свой код на сервере развертывания, IP-адрес, который я вижу, не отражал IP-адрес в моем ifconfig (я тестирую эту конечную точку в корпоративной VPN, подумал, должен ли этот код обнаруживать прокси-серверы?).Я неправильно перехватываю IP?

...