我有一些代码来确定是否已从本地计算机发出Web请求。它使用HttpServletRequest.getLocalAddr()并将结果与127.0.0.1进行比较。
但是,在最后一天,这已经开始无法通过Chrome浏览器发出请求。地址现在是IPV6格式而不是IPV4,即0:0:0:0:0:0:0:1。如果使用IE而不是Chrome,则地址仍为IPV4。
这会导致什么?是否与Chrome有关,可能是对浏览器的更新?或者它更有可能成为我的环境?
答案 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。