21xrx.com
2024-11-22 12:09:00 Friday
登录
文章检索 我的文章 写文章
Java如何获取客户端IP地址
2023-06-11 20:27:23 深夜i     --     --
Java Web开发 客户端IP地址

在Java的Web开发中,我们经常需要获取客户端的IP地址来做一些操作。例如,记录用户IP地址或者限制某些IP地址的访问等等。但是,在Java中直接获取客户端IP地址并不是一件容易的事情,因为客户端IP地址可能被代理或者反向代理了。那么,在Java中如何获取客户端IP地址呢?

方法1:使用ServletRequest

在Java的Web开发中,HttpServletRequest对象代表了客户端发送来的请求。HttpServletRequest提供了一个getRemoteAddr方法,用于获取客户端的IP地址。


String ipAddress = request.getRemoteAddr();

但是这种方法获取的客户端IP地址并不完全可靠。因为在一些情况下,客户端IP地址可能会被代理或者反向代理了。

方法2:使用X-Forwarded-For头信息

对于一些通过了HTTP代理或者负载均衡的客户端IP地址,可以通过X-Forwarded-For头信息获取真实的客户端IP地址。


String ipAddress = request.getHeader("X-Forwarded-For"); 

if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 

  ipAddress = request.getHeader("Proxy-Client-IP"); 

if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 

  ipAddress = request.getHeader("WL-Proxy-Client-IP"); 

}

if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { 

  ipAddress = request.getRemoteAddr(); 

方法3:使用Apache的Commons组件

使用Apache的Commons组件,可以轻松地获取客户端的真实IP地址。


String ipAddress = org.apache.commons.lang3.StringUtils.defaultIfBlank(request.getHeader("X-Forwarded-For"), request.getRemoteAddr());

总结

以上是Java获取客户端IP地址的三种方法,方法1通过ServletRequest来获取,但是不完全可靠;方法2通过X-Forwarded-For头信息来获取,可以解决一些通过了HTTP代理或者负载均衡的情况;方法3则是使用Apache的Commons组件来获取,是一种比较优雅的写法。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复