我正在使用Internet中的Web应用程序,我正在通过检查其客户端IP地址(例如 192.168.2.XXX )来检查用户的登录是否有效。实际上,我找到了一个工作代码(如下)。此代码之前完全正常工作,但经过一段时间后,其输出不再相同。现在,这段代码只给我1个IP地址,即服务器的IP地址。我的代码出了什么问题?如何获取客户端的静态IP地址而不是服务器的IP地址?我还尝试了其他解决方案,例如getRemoteAddr()
和request.getHeader("PROXY-CLIENT-IP")
,但它无效。
爪哇:
String ipAddress = request.getHeader("X-FORWARDED-FOR");
if(ipAddress == null)
ipAddress = InetAddress.getLocalHost().getHostAddress();
答案 0 :(得分:1)
你混合了两个级别的抽象,这很少是一件好事。
标头X-FORWARDED_FOR由负载均衡器或代理插入。如果客户端直接到达服务器,则此标头不存在,并且您正在执行此代码InetAddress.getLocalHost().getHostAddress();
。这正是您所说的:它正在检索运行此代码的主机的IP地址,即Web服务器。
另见:Getting the client IP address: REMOTE_ADDR, HTTP_X_FORWARDED_FOR, what else could be useful?