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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了