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 org.springframework.web.server.ServerWebExchange;
|
||||||
import reactor.core.publisher.Mono;
|
import reactor.core.publisher.Mono;
|
||||||
|
|
||||||
|
import java.net.InetSocketAddress;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@Component
|
@Component
|
||||||
public class RequestLoggingFilter implements GlobalFilter, Ordered {
|
public class RequestLoggingFilter implements GlobalFilter, Ordered {
|
||||||
@@ -18,9 +20,7 @@ public class RequestLoggingFilter implements GlobalFilter, Ordered {
|
|||||||
ServerHttpRequest request = exchange.getRequest();
|
ServerHttpRequest request = exchange.getRequest();
|
||||||
String method = request.getMethod().name();
|
String method = request.getMethod().name();
|
||||||
String path = request.getURI().getPath();
|
String path = request.getURI().getPath();
|
||||||
String clientIp = request.getRemoteAddress() != null
|
String clientIp = extractClientIp(request);
|
||||||
? request.getRemoteAddress().getAddress().getHostAddress()
|
|
||||||
: "unknown";
|
|
||||||
|
|
||||||
log.info(">>> {} {} from {}", method, path, clientIp);
|
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
|
@Override
|
||||||
public int getOrder() {
|
public int getOrder() {
|
||||||
return Ordered.HIGHEST_PRECEDENCE;
|
return Ordered.HIGHEST_PRECEDENCE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user