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