This tutorial shows how to trace incoming HTTP requests using CommonsRequestLoggingFilter.

There are several options to trace the incoming HTTP Requests of a Spring Boot 2.x application. One of the simplest option is to use the CommonsRequestLoggingFilter which can be added as a Bean in any configuration class. See the following example:

package com.example.testrest;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CommonsRequestLoggingFilter;

@Configuration
public class RequestLoggerFilter {

    @Bean
    public CommonsRequestLoggingFilter logFilter() {
        CommonsRequestLoggingFilter filter
                = new CommonsRequestLoggingFilter();
        filter.setIncludeQueryString(true);
        filter.setIncludePayload(true);
        filter.setMaxPayloadLength(10000);
        filter.setIncludeHeaders(false);
        filter.setAfterMessagePrefix("REQUEST DATA : ");
        return filter;
    }
}

You also need to set the logging level for CommonsRequestLoggingFilter in the application.properties file:

logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG

Or as an alternative, in logback.xml:

<logger name="org.springframework.web.filter.CommonsRequestLoggingFilter">
    <level value="DEBUG" />
</logger>

When added, you will be able to see the incoming request in your Spring Boot Console:

2020-04-09 15:53:06.554 DEBUG 13536 --- [nio-8080-exec-1] o.s.w.f.CommonsRequestLoggingFilter      : Before request [uri=/list]
2020-04-09 15:53:06.630 DEBUG 13536 --- [nio-8080-exec-1] o.s.w.f.CommonsRequestLoggingFilter      : REQUEST DATA : uri=/list]

On the other hand, if you want to receive the HTTP Request as a Stream, you can do that by extending the HandlerInterceptorAdapter class:


@Component
public class CustomHandlerInterceptorAdapter extends HandlerInterceptorAdapter {
    
  @Override
  public boolean preHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler) {
        
      ServletRequest servletRequest = new ContentCachingRequestWrapper(request);
      servletRequest.getParameterMap();
        
      // Read inputStream and log it
        
      return true;
  }
}

Mind it, as you are dealing with InputStreams, you cannot read them twice!

FREE WildFly Application Server - JBoss - Quarkus - Drools Tutorials