新建http工具类
import jakarta.servlet.http.HttpServletRequest;
import org.springframework.util.Assert;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class HttpUtils {
static final String UNKNOWN = "unknown";
/**
* 获取当前web请求的来源ip
*
* @return ip地址
*/
public static String getIp() {
ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
Assert.notNull(requestAttributes, "获取不到ServletRequestAttributes,请确认当前处于Web请求的上下文中");
HttpServletRequest request = requestAttributes.getRequest();
return getIp(request);
}
/**
* 获取request请求的来源ip
*
* @param request request请求
* @return ip地址
*/
public static String getIp(HttpServletRequest request) {
if (request == null) {
return UNKNOWN;
}
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Forwarded-For");
}
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Real-IP");
}
if (ip == null || ip.isEmpty() || UNKNOWN.equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
System.out.println(ip);
return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
}
}
添加nginx代理配置
如果请求直接由springboot接收,未经过nginx,则无需配置
增加配置: proxy_set_header X-Real-IP $remote_addr;
修改配置文件
location /api/ {
proxy_set_header Cookie $http_cookie;
proxy_cookie_path / /;
proxy_set_header Host $http_host;
# 增加以下配置转发请求ip
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header request-uri $request_uri;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_read_timeout 3600s;
rewrite /api(.*) /$1 break;
proxy_pass http://127.0.0.1:8080;
}