一、使用HttpServletRequest對象獲取IP地址
Java Web中可以使用HttpServletRequest對象來獲取客戶端的IP地址。使用以下代碼可以獲取IP地址:
public String getIpAddress(HttpServletRequest request) {
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();
}
return ip;
}
以上代碼從request的頭部信息中獲取IP地址,如果沒有則返回request的遠程地址。
二、使用Java Web容器的方法獲取IP地址
有些Java Web容器(如Tomcat)提供了獲取IP的方法,可以直接調用該方法來獲取IP地址。以Tomcat為例,可以使用下面的代碼獲取IP地址:
public String getIpAddress(HttpServletRequest request) {
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();
}
return ip;
}
以上代碼從request的頭部信息中獲取IP地址,如果沒有則返回request的遠程地址。
三、使用第三方庫獲取IP地址
除了使用HttpServletRequest對象和Java Web容器提供的獲取IP地址的方法外,還可以使用第三方庫來獲取IP地址。
常用的第三方庫包括:
- Apache Commons工具包
- Google Guava工具包
- Spring Framework工具包
以下是使用Apache Commons工具包獲取IP地址的代碼:
public String getIpAddress(HttpServletRequest request) {
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();
}
if (ip != null) {
ip = org.apache.commons.lang.StringUtils.stripToNull(ip.split(",")[0]);
}
return ip;
}
以上代碼使用了Apache Commons工具包中的StringUtils類來處理獲取到的IP地址。
四、總結
Java可以通過HttpServletRequest對象、Java Web容器提供的方法、第三方庫來獲取請求IP地址。其中,HttpServletRequest對象是常用的獲取IP地址的方法,同時Apache Commons工具包也是很常用的第三方庫。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/186067.html