Implementing Custom Interceptors in Spring MVC

Define a custom interceptor in bean configuration file

<mvc:interceptors>
    <!-- Custom interceptor declaration -->
    <bean class="com.example.interceptors.CustomInterceptor"/>
</mvc:interceptors>

Implementation of the interceptor class

package com.example.interceptors;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

public class CustomInterceptor implements HandlerInterceptor {
    
    /**
     * Executes before target handler method.
     * Return true to continue chain execution, false to abort.
     * Suitable for authentication, logging, or transaction control.
     * 
     * @param request HTTP request
     * @param response HTTP response
     * @param handler Target handler
     * @return Execution continuation flag
     */
    @Override
    public boolean preHandle(HttpServletRequest request, 
                             HttpServletResponse response, 
                             Object handler) throws Exception {
        System.out.println("CustomInterceptor: preHandle");
        return true;
    }

    /**
     * Executes after handler method but before view rendering.
     * Allows modification of request attributes or view model.
     * 
     * @param request HTTP request
     * @param response HTTP response
     * @param handler Target handler
     * @param modelAndView View model container
     */
    @Override
    public void postHandle(HttpServletRequest request, 
                           HttpServletResponse response, 
                           Object handler, 
                           ModelAndView modelAndView) throws Exception {
        System.out.println("CustomInterceptor: postHandle");
    }

    /**
     * Executes after view rendering completes.
     * Ideal for resource cleanup operations.
     * 
     * @param request HTTP request
     * @param response HTTP response
     * @param handler Target handler
     * @param ex Exception during processing (if any)
     */
    @Override
    public void afterCompletion(HttpServletRequest request, 
                                HttpServletResponse response, 
                                Object handler, 
                                Exception ex) throws Exception {
        System.out.println("CustomInterceptor: afterCompletion");
    }
}

Interceptor execution sequence

preHandle → handler execution → postHandle → view rendering → afterCompletion

Path-specific interceptor configuration

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/specific-path/**"/>
        <bean class="com.example.interceptors.CustomInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

Mlutiple interceptors configuration

<mvc:interceptors>
    <bean class="com.example.interceptors.FirstInterceptor"/>
    <mvc:interceptor>
        <mvc:mapping path="/target-path/**"/>
        <bean class="com.example.interceptors.SecondInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>

Execution flow with multpile interceptors

FirstInterceptor:preHandle
SecondInterceptor:preHandle
HandlerAdapter:handle
SecondInterceptor:postHandle
FirstInterceptor:postHandle
DispatcherServlet:render
SecondInterceptor:afterCompletion
FirstInterceptor:afterCompletion

Tags: Spring MVC interceptor java web development

Posted on Sat, 29 Aug 2026 16:53:44 +0000 by Ironphp