Spring boot MVC interceptor

For test purposes I wanted to add error emulation to our spring server. But I did not want to modify its sources and wanted ability to compile server without this test functionality.

For that I used spring interceptor. In my case interceptor works before server controller.

Test communicates with the interceptor thru additional http headers. As specified in HTTP RFC server shoul ignore unknown headers so this is transparent for it.

Interceptor source:

public class EmulatorInterceptor implements HandlerInterceptor {

    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response, Object object) {
        // check http-header for test command
        final String emulateError = request.getHeader(EMULATE_HEADER);
        if (Objects.equals(EMULATE_NETWORK_CLOSE, emulateError)) {
            ((Response) response).getHttpChannel().getEndPoint().close();
            return false;  // finish request processing
        return true;  // continue request processing in the server controller

We can make our answer in response (and return false so spring won’t call server controller), or we can return true and spring will call server controller.

Configuration class to add the interceptor to the spring application:

public class InterceptorConfig implements WebMvcConfigurer {

    private final EmulatorInterceptor emulatorInterceptor;

    public InterceptorConfig(EmulatorInterceptor emulatorInterceptor) {
        this.emulatorInterceptor = emulatorInterceptor;

    public void addInterceptors(InterceptorRegistry registry) {