如何从http请求获取子网IP地址

我正在编写一个Web应用程序,我需要为应用程序中的所有操作执行审计日志。 为此,我需要获取客户端系统的IP地址。

我正在使用request.getRemoteAddr()来获取远程IP地址。 但这有一个问题,如果客户端在代理后面,这个方法将给出代理系统的IP。

当我进行一些搜索时,我在HttpRequest对象中找到了一个名为’X-FORWARDED-FOR’的头属性。

有人可以告诉我这个头属性是如何工作的,我该如何使用这个头来获取客户端系统的IP地址。

谢谢

getRemoteIP返回用户的远程IP地址(假设所有HTTP中介都是表现良好的WFF标头)。

 String getRemoteIP(HttpServletRequest request) { String xff = request.getHeader("X-Forwarded-For"); if (xff != null) { return xff.split("[\\s,]+")[0]; } return request.getRemoteAddr(); } 

客户端的代理 – 通常是防火墙或某些 – 将使用从客户端接收的IP填充x-forwarded-for头,这通常是,但不是必须的(在用户经过多个代理或防火墙)用户机器的ip。

‘X-FORWARDED-FOR’用于标识通过HTTP代理连接到Web服务器的客户端的原始/实际IP地址。

您可以简单地使用此属性的值来查找原始客户端IP,即使它位于代理后面。