2016-08-09 9 views
0

Ich habe eine Spring Boot-App läuft auf Tomcat. Ich muss jedes IP zu seinem Geolocation auflösen: Stadt, Provinz und Land. Manchmal erhalte ich die IP-Adresse jedoch als kommagetrennte Zeichenfolge anstelle einer einzelnen IP-Adresse. Zum Beispiel 1.39.27.224, 8.37.225.221. Der Code ip von einem HTTP-Anforderung zu extrahieren, die ich benutze:Komma getrennt IPs von Http-Header

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; 
} 

Antwort

2

Die X-Forwarded-For können die ursprüngliche IP-Adresse eines Clients auf einen Webserver über einen HTTP-Proxy oder Lastenausgleich eine Verbindung zu identifizieren.

Das allgemeine Format dieses Feldes ist

X-Forwarded-For: client, proxy1, proxy2 

In obigem Beispiel Sie, dass die Anforderung durch proxy1 und proxy2 geleitet wird sehen können.

In Ihrem Fall sollten Sie diese durch Komma getrennte Zeichenfolge analysieren und den ersten Wert lesen, der die IP-Adresse des Clients ist.

Warnung - Es ist leicht, ein X-Forwarded-For Feld zu fälschen, so dass Sie möglicherweise falsche Informationen erhalten.

Bitte lesen Sie https://en.wikipedia.org/wiki/X-Forwarded-For, um mehr darüber zu lesen.