In this example, we will see how to set interceptors on a HandlerMapping by using the method AbstractHandlerMapping#setInterceptors().
Example
Creating an interceptor
package com.logicbig.example;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.HandlerInterceptor;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
public class MyInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle (HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
System.out.println("preHandle, URI: " + request.getRequestURI());
return true;
}
@Override
public void postHandle (HttpServletRequest request, HttpServletResponse response,
Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("postHandle, URI: " + request.getRequestURI());
}
}
Registering the interceptor
In this example, we are going to use SimpleUrlHandlerMapping:
package com.logicbig.example;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.HttpRequestHandler;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.handler.SimpleUrlHandlerMapping;
import java.util.HashMap;
import java.util.Map;
@EnableWebMvc
@Configuration
public class AppConfig {
@Bean
public SimpleUrlHandlerMapping simpleUrlHandlerMapping () {
SimpleUrlHandlerMapping mapping = new SimpleUrlHandlerMapping();
Map<String, Object> map = new HashMap<>();
map.put("/app", httpRequestHandler());
mapping.setUrlMap(map);
mapping.setInterceptors(new Object[]{new MyInterceptor()});
return mapping;
}
.............
@Bean
HttpRequestHandler httpRequestHandler () {
return new MyHttpRequestHandler();
}
}
The handler
package com.logicbig.example;
import org.springframework.web.HttpRequestHandler;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
public class MyHttpRequestHandler implements HttpRequestHandler {
@Override
public void handleRequest (HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
System.out.println("handling request in MyHttpRequestHandler");
PrintWriter writer = response.getWriter();
writer.write("response from MyHttpRequestHandler, uri: " + request.getRequestURI());
}
}
To try examples, run embedded Jetty (configured in pom.xml of example project below):
mvn jetty:run
Output
$ curl -s "http://localhost:8080/app" response from MyHttpRequestHandler, uri: /app
Server Output preHandle, URI: /app handling request in MyHttpRequestHandler postHandle, URI: /app
In the next tutorial, we will understand the difference between registering a HandlerInterceptor with HandlerMapping#setInterceptors() and with InterceptorRegistry#addInterceptor() (by implementing WebMvcConfigurer and overriding its addInterceptors() method).
Example ProjectDependencies and Technologies Used: - spring-webmvc 7.0.6 (Spring Web MVC)
Version Compatibility: 3.2.9.RELEASE - 7.0.6 Version compatibilities of spring-webmvc with this example: Versions in green have been tested.
- jakarta.servlet-api 6.1.0 (Jakarta Servlet API documentation)
- JDK 25
- Maven 3.9.11
|