0
我試圖從別人向我的REST接口(我使用jax-rs)發送POST請求時從HttpServletRequest獲取IP。下面是我使用來獲取IP的方法(在這裏StackOverflow上一個問題中找到):嘗試從HttpServletRequest獲取IP時出現意外的結果
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;
}
發出請求(在這種情況下,從郵遞員),當接收到的結果是這樣的字符串:fe80:0:0:0:89a0:94d3:58a:a4e3%24
。對我來說這是意想不到的。我需要了解如何獲得一個合適的IP。
從評論中瞭解到,我得到的是ipv6地址,我需要的是ipv4地址。
我檢查了它,它來自request.getRemoteAddr()。 – user16655
這有一個有趣的方式,可以給予IPV4地址或IPV6地址,具體取決於DNS中用於訪問服務器的域的條目。然而,我仍然對美元符號感到困惑。恰巧我幾天前在tomcat上使用了相同的功能,最後我沒有收到美元。 –
有人在這裏寫了一個很好的答案:http://stackoverflow.com/questions/3118829/why-request-getremoteaddr-returns-ipv4-or-ipv6-depending-on-context-post-quer –