In this example, we will see how to set interceptors with a HandlerMapping by using method AbstractHandlerMapping#setInterceptors .
Example
Creating an interceptor
public class MyInterceptor extends HandlerInterceptorAdapter {
@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 interceptor
In this example, we are going to use SimpleUrlHandlerMapping:
@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
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 tomcat (configured in pom.xml of example project below):
mvn tomcat7:run-war
Output
Output on the server console:
preHandle, URI: /app
handling request in MyHttpRequestHandler
postHandle, URI: /app
In the next tutorial, we will understand what is the difference between registering a HandlerInterceptor with HandlerMapping#setInterceptors() and with InterceptorRegistry#addInterceptor() (by extending WebMvcConfigurerAdapter).
Example ProjectDependencies and Technologies Used: - spring-webmvc 4.2.4.RELEASE: Spring Web MVC.
- spring-test 4.2.4.RELEASE: Spring TestContext Framework.
- javax.servlet-api 3.0.1 Java Servlet API
- junit 4.12: JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.
- JDK 1.8
- Maven 3.3.9
|