Java getLocalAddr()返回IPV6地址

时间:2015-09-07 11:02:38

标签: java google-chrome

我有一些代码来确定是否已从本地计算机发出Web请求。它使用HttpServletRequest.getLocalAddr()并将结果与​​127.0.0.1进行比较。

但是,在最后一天,这已经开始无法通过Chrome浏览器发出请求。地址现在是IPV6格式而不是IPV4,即0:0:0:0:0:0:0:1。如果使用IE而不是Chrome,则地址仍为IPV4。

这会导致什么?是否与Chrome有关,可能是对浏览器的更新?或者它更有可能成为我的环境?

1 个答案:

答案 0 :(得分:2)

您不能依赖HttpServletRequest.getLocalAddr()始终返回IPv4地址。相反,您应该检查该地址是IPv4还是IPv6地址并采取相应的行动

InetAddress inetAddress = InetAddress.getByName(request.getRemoteAddr());
if (inetAddress instanceof Inet6Address) {
    // handle IPv6
} else {
    // handle IPv4
}

或解决" localhost"到所有可能的地址并将远程地址与

匹配
Set<String> localhostAddresses = new HashSet<String>();
localhostAddresses.add(InetAddress.getLocalHost().getHostAddress());
for (InetAddress address : InetAddress.getAllByName("localhost")) {
    localhostAddresses.add(address.getHostAddress());
}

if (localhostAddresses.contains(request.getRemoteAddr())) {
    // handle localhost
} else {
    // handle non-localhost
}

请参阅this useful post