fix: null-safe IP extraction in RequestLoggingFilter
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user