我正在编写Web应用程序,我需要为应用程序中的所有操作执行审核日志。为此,我需要获取客户端系统的IP地址。
我正在使用request.getRemoteAddr()来获取远程IP地址。但这有一个问题,如果客户端在代理后面,这个方法将给出代理系统的IP。
当我进行一些搜索时,我在HttpRequest对象中找到了一个名为'X-FORWARDED-FOR'的头属性。
有人可以告诉我这个头属性是如何工作的,我该如何使用这个头来获取客户端系统的IP地址。
谢谢
答案 0 :(得分:5)
getRemoteIP
返回用户的远程IP地址(假设所有HTTP中介都表现良好的XFF标头)。
String getRemoteIP(HttpServletRequest request) {
String xff = request.getHeader("X-Forwarded-For");
if (xff != null) {
return xff.split("[\\s,]+")[0];
}
return request.getRemoteAddr();
}
答案 1 :(得分:2)
客户端的代理 - 通常是防火墙或某些 - 将使用从客户端接收的ip填充x-forwarded-for标头,这通常是,但不是必须的(在用户通过的情况下)多个代理或防火墙)用户机器的IP。
答案 2 :(得分:2)
'X-FORWARDED-FOR'用于标识通过HTTP代理连接到Web服务器的客户端的原始/实际IP地址。
您可以简单地使用此属性的值来查找原始客户端IP,即使它位于代理服务器后面。