Spring Boot – Custom Interceptors (Clean Notes)
1. What is an Interceptor?
An Interceptor is a Spring component that allows you to intercept HTTP requests and responses before or after they reach the controller.
Think of it as a checkpoint between the client and your controller.
You can use it for:
- Authentication & Authorization
- Logging requests & responses
- Caching
- Rate limiting
- Performance tracking
- Header validation
2. Where Interceptor Fits in Request Flow
Client → Tomcat → DispatcherServlet
↓
Interceptor (preHandle)
↓
Controller
↓
Interceptor (postHandle)
↓
View / Response
↓
Interceptor (afterCompletion)
3. Interceptor Life Cycle Methods

public class MyInterceptor implements HandlerInterceptor {
boolean preHandle(...) // Before controller
void postHandle(...) // After controller, before response
void afterCompletion(...)// After response is sent
}
4. Creating a Custom Interceptor
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) {
System.out.println("Before Controller");
return true; // false will block request
}
}
5. Registering Interceptor
@Configuration
public class AppConfig implements WebMvcConfigurer {
@Autowired
private MyInterceptor interceptor;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor)
.addPathPatterns("/api/**")
.excludePathPatterns("/login");
}
}
6. Annotation Based Interceptor (Advanced)
Step 1: Create Annotation
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyCustomAnnotation {
String value() default "";
}
Step 2: Use It
@MyCustomAnnotation("secure")
public void updateUser() { }
Step 3: Intercept It
@Aspect
@Component
public class MyAnnotationInterceptor {
@Around("@annotation(myCustomAnnotation)")
public Object handle(ProceedingJoinPoint jp,
MyCustomAnnotation myCustomAnnotation) throws Throwable {
System.out.println("Before method");
Object result = jp.proceed();
System.out.println("After method");
return result;
}
}
7. Interceptor vs Filter vs AOP
| Feature | Filter | Interceptor | AOP |
|---|---|---|---|
| Runs | Before Spring | Inside Spring | Method level |
| Works on | HTTP request | Controller layer | Business logic |
| Best for | Security, CORS | Logging, auth | Transactions, audit |
8. Real-Time Example
Use Case:
Block request if token is missing.
if(request.getHeader("token") == null) {
response.sendError(401, "Unauthorized");
return false;
}
🎯 Interview Q&A
Q1. What is an interceptor?
A Spring mechanism to intercept requests before or after controller execution.
Q2. Difference between filter and interceptor?
Filter works at servlet level, interceptor works inside Spring MVC.
Q3. Can we stop request in interceptor?
Yes, return false from preHandle().
Q4. When to use annotation-based interceptor?
When only specific methods need interception.
Q5. Is interceptor thread safe?
Yes, if no shared mutable state is used.