fix: null-safe IP extraction in RequestLoggingFilter

This commit is contained in:
2026-02-18 20:15:11 +01:00
parent cf87107156
commit fea458d876

View File

@@ -9,6 +9,8 @@ import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;
import java.net.InetSocketAddress;
@Slf4j
@Component
public class RequestLoggingFilter implements GlobalFilter, Ordered {
@@ -18,9 +20,7 @@ public class RequestLoggingFilter implements GlobalFilter, Ordered {
ServerHttpRequest request = exchange.getRequest();
String method = request.getMethod().name();
String path = request.getURI().getPath();
String clientIp = request.getRemoteAddress() != null
? request.getRemoteAddress().getAddress().getHostAddress()
: "unknown";
String clientIp = extractClientIp(request);
log.info(">>> {} {} from {}", method, path, clientIp);
@@ -35,8 +35,23 @@ public class RequestLoggingFilter implements GlobalFilter, Ordered {
}));
}
private String extractClientIp(ServerHttpRequest request) {
// Prefer X-Forwarded-For header set by Nginx
String xForwardedFor = request.getHeaders().getFirst("X-Forwarded-For");
if (xForwardedFor != null && !xForwardedFor.isBlank()) {
return xForwardedFor.split(",")[0].trim();
}
InetSocketAddress remoteAddress = request.getRemoteAddress();
if (remoteAddress != null && remoteAddress.getAddress() != null) {
return remoteAddress.getAddress().getHostAddress();
}
return "unknown";
}
@Override
public int getOrder() {
return Ordered.HIGHEST_PRECEDENCE;
}
}
}