JAVA -获取请求真实IP
1、服务端JAVA获取真实IP
public static String getip(HttpServletRequest request) {
JSONObject ho = new JSONObject();
Enumeration e = request.getHeaderNames();
String remoteIp;
while (e.hasMoreElements()) {
remoteIp = (String) e.nextElement();
ho.put(remoteIp, request.getHeader(remoteIp));
}
remoteIp = "";
remoteIp = request.getHeader("remote_addr");
logger.debug("Request Header remote_addr 获取IP-{}", remoteIp);
if (remoteIp == null || remoteIp.isEmpty()) {
if (ho.get("X-Forwarded-For") == null && ho.get("x-forwarded-for") == null) {
if (remoteIp == null || remoteIp.isEmpty()) {
remoteIp = request.getRemoteAddr();
logger.debug("request.getRemoteAddr 获取IP-{}", remoteIp);
}
} else {
String xForwardedFor = ho.containsKey("X-Forwarded-For") ? ho.getString("X-Forwarded-For") : ho.getString("x-forwarded-for");
if (xForwardedFor != null && !xForwardedFor.isEmpty()) {
remoteIp = xForwardedFor.split(",")[0];
int len = xForwardedFor.split(",").length;
localIp = xForwardedFor.split(",")[len - 1];
}
logger.debug("X-Forwarded-For获取IP-{}", remoteIp);
}
}
return remoteIp;
}
2、如服务端获取IP为服务器IP,可能由于转发过程中丢失真实IP,nginx server配置以下内容:
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;