Ich versuche, die IP von HttpServletRequest zu bekommen, wenn jemand eine POST-Anfrage an meine REST-Schnittstelle (ich benutze Jax-Rs). Hier ist die Methode, die ich bin mit dem IP zu erhalten (in einer anderen Frage hier auf Stackoverflow gefunden):Unerwartetes Ergebnis beim Versuch, ip von HttpServletRequest zu erhalten
public static String getClientIpAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
Das Ergebnis erhalten, wenn Sie eine Anfrage machen (in diesem Fall von PostMan) ist dieser String: fe80:0:0:0:89a0:94d3:58a:a4e3%24
. Für mich ist das unerwartet. Ich muss verstehen, wie man eine richtige IP bekommt.
Wie aus den Kommentaren zu verstehen, was ich bekomme, ist die IPv6-Adresse, was ich brauche, ist die IPv4-Adresse.
Ich überprüft, und es kommt von request.getRemoteAddr(). – user16655
Das hat eine interessante Möglichkeit, entweder IPV4-Adressen oder IPV6-Adressen zu geben, abhängig davon, welchen Eintrag es im DNS für die Domäne gibt, die für den Zugriff auf den Server verwendet wird. Ich bin jedoch immer noch verwirrt über das Dollarzeichen. Es ist zufällig, dass ich vor ein paar Tagen die gleiche Funktion mit Tomcat benutzt habe und ich bekomme den Dollar am Ende nicht. –
Jemand anderes schrieb hier eine gute Antwort: http://stackoverflow.com/questions/3118829/why-request-getremoteaddr-returns-ipv4-or-ipv6-depending-on-context-post-quer –