Java 如何从http请求中获取子网ip地址

Java 如何从http请求中获取子网ip地址,java,Java,我正在编写一个web应用程序,我需要对应用程序中的所有操作进行审核日志。为此,我需要获取客户端系统的IP地址 我正在使用request.getRemoteAddr()获取远程IP地址。但是这有一个问题,如果客户机在一个代理后面,这个方法将给出代理系统的IP 当我进行一些搜索时,我在HttpRequest对象中找到了一个名为“X-FORWARDED-FOR”的头属性 有人能告诉我这个头属性是如何工作的吗?我如何使用这个头来获取客户端系统的IP地址 谢谢客户端的代理(通常是防火墙之类的)将使用它从客

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

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

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

有人能告诉我这个头属性是如何工作的吗?我如何使用这个头来获取客户端系统的IP地址


谢谢

客户端的代理(通常是防火墙之类的)将使用它从客户端接收的ip填充x-forwarded-for标头,这通常是,但不是必需的(在用户通过多个代理或防火墙的情况下)用户机器的ip。

客户机的代理(通常是防火墙或类似的东西)将使用从其客户机接收的ip填充x-forwarded-for报头,这通常是,但不是必需的(在用户通过多个代理或防火墙的情况下)用户机器的ip。

'X-FORWARDED-FOR'用于识别通过HTTP代理连接到web服务器的客户端的原始/实际ip地址


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

'X-FORWARDED-for'用于标识通过HTTP代理连接到web服务器的客户端的原始/实际IP地址


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

getRemoteIP
返回用户的远程IP地址(假设所有HTTP中介都是性能良好的wrt XFF头)


getRemoteIP
返回用户的远程IP地址(假设所有HTTP中介都是性能良好的wrt XFF头)

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