您的位置:首页 > 运维架构 > Nginx

Java request获取客户端ip,各种apach,nginx等代理后依然正确

2017-02-22 17:15 441 查看
在JSP,Java里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是,如果使用了反向代理软件Apache,Squid,nginx等后,就不能获取到客户端的真实IP地址了。

最近我便是在项目中遇到类似问题,客户端访问,由于web项目是有nginx代理的,得到的ip竟然是服务器的局域ip,并非客服端ip,经过强大的博客,我得到了以下方法,记录总结:

以下方法亲测可用,能获取代理(前)后客户端的ip地址:

/**
* TODO //获得客户端的ip地址
* @param request
* @return
* @author yqwang
* @date 2017年2月22日 下午3:55:40
*/
public static String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
}
return request.getHeader("x-forwarded-for");
}

/**
* TODO //获得客户端的主机名
* @param request
* @return
* @author yqwang
* @date 2017年2月22日 下午3:55:27
*/
public static String getRemoteHost(javax.servlet.http.HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ip;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java IP web nginx request