当有人向我的REST界面发出POST请求时,我试图从HttpServletRequest获取IP(我使用jax-rs)。这是我用来获取IP的方法(在StackOverflow上的另一个问题中找到):
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;
}
在发出请求时收到的结果(在本例中来自PostMan)是这个字符串:fe80:0:0:0:89a0:94d3:58a:a4e3%24
。对我来说这是出乎意料的。我需要了解如何获得适当的IP。
从评论中可以看出,我得到的是ipv6地址,我需要的是ipv4地址。
答案 0 :(得分:1)
这看起来像一个IPV6地址,最后有一个$。我不知道你从哪个部分获得这个功能。
传统的IPV4地址是其中的一部分。该功能的不同部分可能返回不同版本的IP。我不知道,但我会在其中加上一些痕迹,以了解发生了什么。如果你不知道从哪里来的话,你会感到很困惑。
GetRemoteAddress函数是直接连接到servlet的IP地址,当然,它可能已经通过代理等。
真正取决于您使用的IP地址。我认为值得将IPV6功能构建到系统中以便将来进行验证,即使这种未来在某种程度上是在轨道上。