21xrx.com
2024-12-23 00:02:37 Monday
登录
文章检索 我的文章 写文章
Java技术实现获取请求IP
2023-06-12 10:14:03 深夜i     --     --
Java技术 ServletRequest对象 HttpServletRequest对象 Spring框架 X-Forwarded-For头

文章

Java技术在Web开发中被广泛应用,获取请求IP是其中的一个重要功能。在实际场景中,我们可能需要记录某个IP的访问记录或做一些限制操作,例如限制特定IP的访问频率等等。本文将介绍如何使用Java技术获取请求IP的方法。

一、使用ServletRequest对象获取请求IP

ServletRequest对象为处理Http请求提供了许多有用的方法,例如获取请求IP地址的方法:

String ipAddress = request.getRemoteAddr();

此方法将返回请求的IP地址,但其并不一定总是准确的。例如,使用代理服务器或某些云技术时,请求的IP地址可能会被重写或重定向。

二、使用HttpServletRequest对象获取请求IP

HttpServletRequest对象是ServletRequest对象的子类,它提供了更多的方法来处理Http请求。有两种方法获取请求IP地址:

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

此方法适用于使用代理服务器的情况,X-Forwarded-For头包含了请求的IP地址及其前面的所有代理服务器的IP地址。

2. String ipAddress = request.getRemoteAddr();

与ServletRequest对象相同,此方法也可用来获取请求IP地址。根据具体情形,可按需选择使用。

三、使用Spring框架获取请求IP

Spring框架是一种流行的Java框架,其中提供了获取请求IP的方法:

HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();

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();

}

此代码段将先尝试获取X-Forwarded-For头,再逐一获取代理服务器的IP地址,最后获取请求IP地址。

  
  

评论区

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