java web 服务器端获得 客户端ip

java web 服务器端获得 客户端ip

  • java web 服务器端获得客户端的ip通常是经过 HttpServletRequest的getRemoteAddr()方法获得,而当服务器端设置了反向代理,经过该方法获得的其实是代理服务器的ip。客户端实际请求的是反向代理服务器,而反向代理服务器再将请求转发给web服务器,反向代理服务器在将请求转发给web服务器时会将客户端源 IP 地址附加在原始的 HTTP 请求头上,非标准协议的代理源 IP 地址请求头有 X-Forwarded-For、X-Real-Ip 等,能够直接依据优先级从这些 HTTP 头获取数据,若是实如今获取不到的话,再从 HttpServletRequest 的 getRemoteAddr() 方法中获取。 代码以下:
/**
 * 得到用户远程地址
*/
	private String getRemoteAddr(HttpServletRequest request) {
		String remoteAddr = request.getHeader("X-Real-IP");
		if (StringUtils.isEmpty(remoteAddr)) {
			remoteAddr = request.getHeader("X-Forwarded-For");
		} else if (StringUtils.isEmpty(remoteAddr)) {
			remoteAddr = request.getHeader("Proxy-Client-IP");
		} else if (StringUtils.isEmpty(remoteAddr)) {
			remoteAddr = request.getHeader("WL-Proxy-Client-IP");
		}
		return remoteAddr != null ? remoteAddr : request.getRemoteAddr();
	}

多级反向代理时状况可能更复杂。 参考:(http://www.oschina.net/question/819166_124476) (http://blog.csdn.net/sgx425021234/article/details/19043459)java

相关文章
相关标签/搜索