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