获取客户端真实IP——request.getHeader("x-forwarded-for")

  在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分状况下都是有效的。可是在经过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实IP地址了。若是使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并非客户端的真实IP。
  通过代理之后,因为在客户端和服务之间增长了中间层,所以服务器没法直接拿到客户端的 IP,服务器端应用也没法直接经过转发请求的地址返回给客户端。可是在转发请求的HTTP头信息中,增长了X-FORWARDED-FOR信息。用以跟踪原有的客户端 IP地址和原来客户端请求的服务器地址。
  举例来讲,当咱们访问口碑网首页hangzhou.jsp时,其实并非咱们浏览器真正访问到了服务器上的hangzhou.jsp 文件,而是先由代理服务器Nagix去访问hagnzhou.jsp ,代理服务器再将访问到的结果返回给咱们的浏览器,由于是代理服务器去访问hangzhou.jsp的,因此hangzhou.jsp中经过 request.getRemoteAddr()的方法获取的IP其实是代理服务器的地址,并非客户端的IP地址。
 
/*
**得到客户端真实IP的方法
*/

/*
** 1st
*/
public String getRemortIP( HttpServletRequest request ) {
	if (request.getHeader( "x-forwarded-for" ) == null) {
		return request.getRemoteAddr();
	}
	return request.getHeader( "x-forwarded-for" );
}

/*
** 2nd
*/
public String getIpAddr(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;
}
相关文章
相关标签/搜索