java web 服务器端得到 客户端ip
博客专区 > 0909 的博客 > 博客详情
java web 服务器端得到 客户端ip
0909 发表于2年前
java web 服务器端得到 客户端ip
  • 发表于 2年前
  • 阅读 19
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

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)

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 22
博文 16
码字总数 25047
×
0909
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: