Spring Boot 2 Actuator (2.0.1-RELEASE) - 请求和响应主体

kia*_*ara 5 spring-boot spring-boot-actuator

其次职创建一个过滤器来获得请求和响应主体。

Spring Boot 2 过滤器 (HttpTraceFilter) 似乎有点不同,所以不确定如何从请求属性设置 http 跟踪属性。

非常感谢任何帮助!

@Component
public class RequestTraceFilter extends HttpTraceFilter {

/**
 * Create a new {@link HttpTraceFilter} instance.
 *
 * @param repository the trace repository
 * @param tracer     used to trace exchanges
 */
public RequestTraceFilter(HttpTraceRepository repository,
        HttpExchangeTracer tracer) {
    super(repository, tracer);
}

//TODO override the filter :(
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws
        ServletException,
        IOException {

    ContentCachingRequestWrapper requestWrapper = new ContentCachingRequestWrapper(request);
    ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response);

    filterChain.doFilter(requestWrapper, responseWrapper);
    responseWrapper.copyBodyToResponse();
    request.setAttribute("REQUEST_BODY", getRequestBody(requestWrapper));
    request.setAttribute("RESPONSE_BODY", getResponseBody(responseWrapper));

    super.doFilterInternal(requestWrapper, responseWrapper, filterChain);

}

private String getRequestBody(ContentCachingRequestWrapper request) {
    ContentCachingRequestWrapper wrapper = WebUtils.getNativeRequest(request, ContentCachingRequestWrapper.class);
    String characterEncoding = wrapper.getCharacterEncoding();
    return getPayload(wrapper.getContentAsByteArray(), characterEncoding);
}

private String getResponseBody(ContentCachingResponseWrapper response) {
    ContentCachingResponseWrapper wrapper = WebUtils.getNativeResponse(response, ContentCachingResponseWrapper.class);
    return getPayload(wrapper.getContentAsByteArray(), wrapper.getCharacterEncoding());
}

public String getPayload(byte[] buf, String characterEncoding) {
    String payload = null;
    if (buf.length > 0) {
        try {
            payload = new String(buf, 0, buf.length, characterEncoding);
        }
        catch (UnsupportedEncodingException ex) {
            payload = "[unknown]";
        }
    }
    return payload;
}
Run Code Online (Sandbox Code Playgroud)

}