我们经常会遇到获取用户真实请求的 IP 地址的需求,但是如果后端服务器进行了反向代理,我们就需要做一下特殊处理才能获取用户的真实 IP。
@NoArgsConstructor(access = AccessLevel.PRIVATE)
public class IpUtils {
public static String getRealIp(HttpServletRequest request) {
// 如果用户请求经过了反向代理服务器,那么需要通过 x-forwarded-for 的请求头获取真实 IP
String forwardedAddr = request.getHeader("x-forwarded-for");
if (StringUtils.isNotBlank(forwardedAddr)) {
if (forwardedAddr.contains(",")) {
return forwardedAddr.substring(0, forwardedAddr.indexOf(","));
}
return forwardedAddr;
}
return request.getRemoteAddr();
}
}