package com.ruoyi.im.config;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.net.InetAddress;
|
import java.net.UnknownHostException;
|
|
/**
|
* 获取IP地址工具类
|
*/
|
public class IpUtils {
|
|
/**
|
* 获取客户端真实IP地址
|
* 考虑了反向代理、负载均衡等情况
|
*/
|
public static String getClientIp(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();
|
}
|
|
// 对于通过多个代理的情况,第一个IP为客户端真实IP
|
if (ip != null && ip.contains(",")) {
|
ip = ip.split(",")[0].trim();
|
}
|
|
// 处理本地地址
|
if ("0:0:0:0:0:0:0:1".equals(ip) || "127.0.0.1".equals(ip)) {
|
// 根据实际网卡取本机配置的IP
|
ip = getLocalIp();
|
}
|
|
return ip;
|
}
|
|
/**
|
* 获取本机IP地址
|
*/
|
public static String getLocalIp() {
|
try {
|
return InetAddress.getLocalHost().getHostAddress();
|
} catch (UnknownHostException e) {
|
return "127.0.0.1";
|
}
|
}
|
|
/**
|
* 获取请求的完整URL
|
*/
|
public static String getRequestUrl(HttpServletRequest request) {
|
StringBuffer url = request.getRequestURL();
|
String queryString = request.getQueryString();
|
if (queryString != null) {
|
url.append("?").append(queryString);
|
}
|
return url.toString();
|
}
|
|
/**
|
* 获取用户代理信息
|
*/
|
public static String getUserAgent(HttpServletRequest request) {
|
return request.getHeader("User-Agent");
|
}
|
|
/**
|
* 获取请求方法
|
*/
|
public static String getMethod(HttpServletRequest request) {
|
return request.getMethod();
|
}
|
}
|