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

相關文章
相關標籤/搜索