Fix request header capture corrupting tomcat request (#11469)

This commit is contained in:
Lauri Tulmin 2024-05-29 09:11:05 +03:00 committed by GitHub
parent 6c7afce137
commit 300ad5ebb3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 13 additions and 1 deletions

View File

@ -8,6 +8,7 @@ package io.opentelemetry.javaagent.instrumentation.tomcat.common;
import static io.opentelemetry.javaagent.instrumentation.tomcat.common.TomcatHelper.messageBytesToString;
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import javax.annotation.Nullable;
@ -15,6 +16,7 @@ import org.apache.coyote.ActionCode;
import org.apache.coyote.Request;
import org.apache.coyote.Response;
import org.apache.tomcat.util.buf.MessageBytes;
import org.apache.tomcat.util.http.MimeHeaders;
public class TomcatHttpAttributesGetter implements HttpServerAttributesGetter<Request, Response> {
@ -44,7 +46,17 @@ public class TomcatHttpAttributesGetter implements HttpServerAttributesGetter<Re
@Override
public List<String> getHttpRequestHeader(Request request, String name) {
return Collections.list(request.getMimeHeaders().values(name));
List<String> result = null;
MimeHeaders headers = request.getMimeHeaders();
int i = headers.findHeader(name, 0);
while (i != -1) {
if (result == null) {
result = new ArrayList<>();
}
result.add(messageBytesToString(headers.getValue(i)));
i = headers.findHeader(name, i + 1);
}
return result != null ? result : Collections.emptyList();
}
@Override