In Spring Boot, both filters and interceptors are used to manipulate HTTP requests and responses, but they operate at different levels and have distinct purposes.
Filters:
- Definition:
- Filters are part of the Servlet API and are used to preprocess and postprocess HTTP requests and responses. They are defined in the
javax.servlet
package. - Scope:
- Operate at the servlet level, meaning they can affect all requests and responses passing through a servlet, regardless of the framework in use.
- Usage:
- Typically used for tasks such as logging, authentication, input validation, and modifying request and response objects.
- Configuration:
- Filters are configured in the
web.xml
file or via Java configuration usingFilterRegistrationBean
in Spring Boot. - Order:
- Filters are executed in the order defined in the configuration. You can specify the order using the
@Order
annotation or by setting the order inFilterRegistrationBean
. - Example:
```java
@Component
@Order(1)
public class MyFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// Pre-processing logic
System.out.println("Request received at: " + new Date());
// Pass the request and response to the next filter or servlet chain.doFilter(request, response); // Post-processing logic
System.out.println("Response sent at: " + new Date());
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// Initialization logic
}
@Override
public void destroy() {
// Cleanup logic
}
}
```
Interceptors:
- Definition:
- Interceptors are part of the Spring framework and are used to intercept HTTP requests and responses within the Spring MVC context. They are defined in the
org.springframework.web.servlet
package. - Scope:
- Operate specifically within the Spring MVC framework, allowing for pre-processing and post-processing of requests handled by Spring MVC controllers.
- Usage:
- Typically used for tasks such as handling cross-cutting concerns like logging, authentication, authorization, and modifying or inspecting the model and view objects.
- Configuration:
- Interceptors are configured in Spring’s application context through Java configuration or XML configuration by implementing
HandlerInterceptor
and registering it viaWebMvcConfigurer
. - Order:
- Interceptors are executed in the order specified in the
addInterceptors
method in theWebMvcConfigurer
implementation. - Example:
```java
@Component
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// Pre-processing logic before the handler method is invoked
System.out.println("Pre-handle logic");
return true; // Continue processing
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
// Post-processing logic after the handler method is invoked
System.out.println("Post-handle logic");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
// Cleanup logic after the request has been completed
System.out.println("After completion logic");
}
}
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}
}
```
Summary of Differences:
- Level of Operation:
- Filters: Operate at the servlet level and are part of the Servlet API.
- Interceptors: Operate within the Spring MVC framework.
- Usage Context:
- Filters: Can be used with any servlet-based application, not limited to Spring.
- Interceptors: Specifically designed for handling requests and responses in Spring MVC applications.
- Configuration:
- Filters: Configured via
web.xml
orFilterRegistrationBean
. - Interceptors: Configured via
WebMvcConfigurer
in Spring Boot. - Order and Scope:
- Filters: Configured globally and executed in the order defined in the configuration.
- Interceptors: Configured specifically for Spring MVC and executed based on the order defined in the
addInterceptors
method.
Both filters and interceptors serve different purposes and can be used together to achieve comprehensive request and response handling in a Spring Boot application.