This is an automated email from the ASF dual-hosted git repository. bonampak pushed a commit to branch feature/jakarta-jetty-upgrade in repository https://gitbox.apache.org/repos/asf/knox.git
commit 8c177f44bf11faf0321a45d7a4cda36162072a24 Author: bonampak <[email protected]> AuthorDate: Thu Mar 12 15:21:10 2026 +0100 KNOX-3238: correcting CorrelationHandler (thread context will not work in Jetty 12, as Jetty will use 1...n threads for a request / response exchange). --- .../knox/gateway/filter/CorrelationHandler.java | 31 +++++++++++----------- 1 file changed, 15 insertions(+), 16 deletions(-) diff --git a/gateway-server/src/main/java/org/apache/knox/gateway/filter/CorrelationHandler.java b/gateway-server/src/main/java/org/apache/knox/gateway/filter/CorrelationHandler.java index 01b34cc49..6b732f8c1 100644 --- a/gateway-server/src/main/java/org/apache/knox/gateway/filter/CorrelationHandler.java +++ b/gateway-server/src/main/java/org/apache/knox/gateway/filter/CorrelationHandler.java @@ -17,41 +17,40 @@ */ package org.apache.knox.gateway.filter; -import java.io.IOException; import java.util.UUID; -import jakarta.servlet.ServletException; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.servlet.http.HttpServletResponse; import org.apache.commons.lang3.StringUtils; +import org.apache.knox.gateway.audit.api.CorrelationContext; import org.apache.knox.gateway.audit.api.CorrelationService; import org.apache.knox.gateway.audit.api.CorrelationServiceFactory; import org.apache.knox.gateway.audit.log4j.correlation.Log4jCorrelationContext; import org.apache.logging.log4j.CloseableThreadContext; +import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.Request; -import org.eclipse.jetty.server.handler.HandlerWrapper; +import org.eclipse.jetty.server.Response; +import org.eclipse.jetty.util.Callback; -public class CorrelationHandler extends HandlerWrapper { +public class CorrelationHandler extends Handler.Wrapper { public static final String REQUEST_ID_HEADER_NAME = "X-Request-Id"; public static final String TRACE_ID = "trace_id"; @Override - public void handle( String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response ) - throws IOException, ServletException { + public boolean handle(Request request, Response response, Callback callback) throws Exception { CorrelationService correlationService = CorrelationServiceFactory.getCorrelationService(); /* If request contains X-Request-Id header use it else use random uuid as correlation id */ - final String reqID = - StringUtils.isBlank(request.getHeader(REQUEST_ID_HEADER_NAME)) ? - UUID.randomUUID().toString() : - request.getHeader(REQUEST_ID_HEADER_NAME); + final String requestIdHeaderValue = request.getHeaders().get(REQUEST_ID_HEADER_NAME); + final String reqID = StringUtils.isBlank(requestIdHeaderValue) ? + UUID.randomUUID().toString() : + requestIdHeaderValue; - correlationService.attachContext( - new Log4jCorrelationContext(reqID, - null, null)); + CorrelationContext context = new Log4jCorrelationContext(reqID, null, null); + + correlationService.attachContext(context); try(CloseableThreadContext.Instance ctc = CloseableThreadContext.put(TRACE_ID, reqID)) { - super.handle( target, baseRequest, request, response ); + return super.handle(request, response, callback); } finally { correlationService.detachContext(); } } + }
