Skip to content

Commit

Permalink
response body bug
Browse files Browse the repository at this point in the history
  • Loading branch information
songlonqi-java committed Dec 24, 2024
1 parent c053aa5 commit cf81750
Showing 1 changed file with 53 additions and 29 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,7 @@ public class HandlerMappingResourceNameFilter extends OncePerRequestFilter imple

@Override
protected void doFilterInternal(
final HttpServletRequest request,
HttpServletResponse response,
final FilterChain filterChain)
final HttpServletRequest request, HttpServletResponse response, final FilterChain filterChain)
throws ServletException, IOException {
final Object parentSpan = request.getAttribute(DD_SPAN_ATTRIBUTE);
if (parentSpan instanceof AgentSpan) {
Expand All @@ -50,7 +48,7 @@ protected void doFilterInternal(
response.setHeader("guance_trace_id", GlobalTracer.get().getTraceId());
boolean tracerHeader = Config.get().isTracerHeaderEnabled();
boolean requestBodyEnabled = Config.get().isTracerRequestBodyEnabled();
boolean responseBodyEnabled = Config.get().isTracerRequestBodyEnabled();
boolean responseBodyEnabled = Config.get().isTracerResponseBodyEnabled();
if (!(tracerHeader || requestBodyEnabled || responseBodyEnabled)) {
log.debug("尚未开启 request|response 功能");
filterChain.doFilter(request, response);
Expand All @@ -61,13 +59,12 @@ protected void doFilterInternal(

ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);
ContentCachingRequestWrapper requestWrapper = null;
String contextType =null;
String contextType = null;
String methodType = null;

requestWrapper = new ContentCachingRequestWrapper(request);
filterChain.doFilter(requestWrapper, responseWrapper);


byte[] data = responseWrapper.getContentAsByteArray();
responseWrapper.copyBodyToResponse();

Expand All @@ -80,58 +77,85 @@ protected void doFilterInternal(
Enumeration<String> headerNames = requestWrapper.getHeaderNames();
int count = 0;
while (headerNames.hasMoreElements()) {
if (count==0){
if (count == 0) {
requestHeader.append("{");
}else{
} else {
requestHeader.append(",\n");
}
String headerName = headerNames.nextElement();
requestHeader.append("\"").append(headerName).append("\":").append("\"").append(requestWrapper.getHeader(headerName).replace("\"","")).append("\"");
count ++;
requestHeader
.append("\"")
.append(headerName)
.append("\":")
.append("\"")
.append(requestWrapper.getHeader(headerName).replace("\"", ""))
.append("\"");
count++;
}
if (count>0){
if (count > 0) {
requestHeader.append("}");
}
count = 0;
for (String headerName : responseWrapper.getHeaderNames()) {
if (count==0){
if (count == 0) {
responseHeader.append("{");
// responseHeader.append("\"guance_trace_id\":").append("\"").append(GlobalTracer.get().getTraceId()).append("\"");
}else{
//
// responseHeader.append("\"guance_trace_id\":").append("\"").append(GlobalTracer.get().getTraceId()).append("\"");
} else {
responseHeader.append(",\n");
}
responseHeader.append("\"").append(headerName).append("\":").append("\"").append(responseWrapper.getHeader(headerName)).append("\"");
count ++;
responseHeader
.append("\"")
.append(headerName)
.append("\":")
.append("\"")
.append(responseWrapper.getHeader(headerName))
.append("\"");
count++;
}

if (count>0){
if (count > 0) {
responseHeader.append("}");
}
span.setTag("request_header",requestHeader.toString());
span.setTag("response_header",responseHeader.toString());
span.setTag("request_header", requestHeader.toString());
span.setTag("response_header", responseHeader.toString());
}
if (Config.get().isTracerRequestBodyEnabled() && "POST".equalsIgnoreCase(methodType) && contextType != null && (contextType.contains("application/json"))) {
if (Config.get().isTracerRequestBodyEnabled()
&& "POST".equalsIgnoreCase(methodType)
&& contextType != null
&& (contextType.contains("application/json"))) {
span.setTag("request_body", new String(requestWrapper.getContentAsByteArray()));
}
int dataLength = data.length;
log.debug("response.getContentType() >>>> :{},traceId:{},spanId:{},dataLength:{},responseBodyEnabled:{}",responseWrapper.getContentType(),GlobalTracer.get().getTraceId(),span.getSpanId(),dataLength,Config.get().isTracerResponseBodyEnabled());
log.debug(
"response.getContentType() >>>> :{},traceId:{},spanId:{},dataLength:{},responseBodyEnabled:{}",
responseWrapper.getContentType(),
GlobalTracer.get().getTraceId(),
span.getSpanId(),
dataLength,
Config.get().isTracerResponseBodyEnabled());
if (Config.get().isTracerResponseBodyEnabled()) {
if (responseWrapper.getContentType() != null && (responseWrapper.getContentType().contains("application/json") || responseWrapper.getContentType().contains("text/plain"))) {
if (responseWrapper.getContentType() != null
&& (responseWrapper.getContentType().contains("application/json")
|| responseWrapper.getContentType().contains("text/plain"))) {
try {
if (dataLength<1024*2) {
if (dataLength < 1024 * 2) {
span.setTag("response_body", new String(data));
}else{
span.setTag("response_body", new String(data).substring(0,1024*2-1));
} else {
span.setTag("response_body", new String(data).substring(0, 1024 * 2 - 1));
}
}catch (Exception e){
log.error("traceId:{},span:{},response_body",GlobalTracer.get().getTraceId(),span.getSpanId(),e.getMessage());
} catch (Exception e) {
log.error(
"traceId:{},span:{},response_body",
GlobalTracer.get().getTraceId(),
span.getSpanId(),
e.getMessage());
}
}
}
}else{
} else {
filterChain.doFilter(request, response);
}

}

/**
Expand Down

0 comments on commit cf81750

Please sign in to comment.