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 –