获取请求的公网IP地址

在开发Web应用程序时,有时需要获取用户的公网IP地址。在Java中,可以通过HttpServletRequest对象来获取请求的IP地址。用户的IP地址可以帮助我们进行一些安全验证或者记录访问日志。

获取请求的公网IP地址

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.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
    ip = request.getRemoteAddr();
}

以上代码通过逐个判断请求头来获取用户的IP地址。首先尝试获取X-Forwarded-For头信息,如果不存在则继续尝试其他头信息。如果所有头信息都没有获取到,则使用getRemoteAddr()方法来获取用户的IP地址。

类图

classDiagram
    class HttpServletRequest {
        + getHeader(String name): String
        + getRemoteAddr(): String
    }

上面的类图展示了HttpServletRequest类的两个方法,用于获取请求头和远程地址。

关系图

erDiagram
    IP_ADDR ||--|| HttpServletRequest: 获取

上面的关系图展示了IP_ADDR实体与HttpServletRequest实体之间的获取关系。

通过上述代码示例和类图、关系图,我们可以清晰地了解如何在Java中获取请求的公网IP地址。这对于我们开发Web应用程序时非常有用。希望本篇科普文章对读者有所帮助。