Skip to content

Commit 300ad5e

Browse files
authored
Fix request header capture corrupting tomcat request (#11469)
1 parent 6c7afce commit 300ad5e

File tree

1 file changed

+13
-1
lines changed

1 file changed

+13
-1
lines changed

instrumentation/tomcat/tomcat-common/javaagent/src/main/java/io/opentelemetry/javaagent/instrumentation/tomcat/common/TomcatHttpAttributesGetter.java

+13-1
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,15 @@
88
import static io.opentelemetry.javaagent.instrumentation.tomcat.common.TomcatHelper.messageBytesToString;
99

1010
import io.opentelemetry.instrumentation.api.semconv.http.HttpServerAttributesGetter;
11+
import java.util.ArrayList;
1112
import java.util.Collections;
1213
import java.util.List;
1314
import javax.annotation.Nullable;
1415
import org.apache.coyote.ActionCode;
1516
import org.apache.coyote.Request;
1617
import org.apache.coyote.Response;
1718
import org.apache.tomcat.util.buf.MessageBytes;
19+
import org.apache.tomcat.util.http.MimeHeaders;
1820

1921
public class TomcatHttpAttributesGetter implements HttpServerAttributesGetter<Request, Response> {
2022

@@ -44,7 +46,17 @@ public String getUrlQuery(Request request) {
4446

4547
@Override
4648
public List<String> getHttpRequestHeader(Request request, String name) {
47-
return Collections.list(request.getMimeHeaders().values(name));
49+
List<String> result = null;
50+
MimeHeaders headers = request.getMimeHeaders();
51+
int i = headers.findHeader(name, 0);
52+
while (i != -1) {
53+
if (result == null) {
54+
result = new ArrayList<>();
55+
}
56+
result.add(messageBytesToString(headers.getValue(i)));
57+
i = headers.findHeader(name, i + 1);
58+
}
59+
return result != null ? result : Collections.emptyList();
4860
}
4961

5062
@Override

0 commit comments

Comments
 (0)