arranque de spring añadiendo interceptores de solicitud HTTP

¿Cuál es la forma correcta de agregar interceptores HttpRequest en la aplicación de arranque de spring? Lo que quiero hacer es registrar solicitudes y respuestas para cada solicitud http.

La documentación de arranque de spring no cubre este tema en absoluto. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ )

Encontré algunas muestras web sobre cómo hacer lo mismo con versiones anteriores de la spring, pero esas funcionan con applicationcontext.xml. Por favor ayuda.

Como está utilizando Spring Boot, supongo que preferiría confiar en la configuración automática de Spring cuando sea posible. Para agregar configuraciones personalizadas adicionales como sus interceptores, solo proporcione una configuración o bean de WebMvcConfigurerAdapter .

Aquí hay un ejemplo de una clase de configuración:

 @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Autowired HandlerInterceptor yourInjectedInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(...) ... registry.addInterceptor(getYourInterceptor()); registry.addInterceptor(yourInjectedInterceptor); // next two should be avoid -- tightly coupled and not very testable registry.addInterceptor(new YourInterceptor()); registry.addInterceptor(new HandlerInterceptor() { ... }); } } 

NOTA: no anote esto con @EnableWebMvc, si desea mantener la configuración automática de Spring Boots para mvc .

WebMvcConfigurerAdapter quedará obsoleto con Spring 5. Desde su Javadoc :

@deprecated a partir de 5.0 {@link WebMvcConfigurer} tiene métodos predeterminados (posibles gracias a una línea base de Java 8) y puede implementarse directamente sin la necesidad de este adaptador

Como se indicó anteriormente, lo que debe hacer es implementar WebMvcConfigurer y anular el método addInterceptors .

 @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new MyCustomInterceptor()); } } 

Para agregar un interceptor a una aplicación de arranque de resorte, haga lo siguiente

  1. Crea una clase de interceptor

     public class MyCustomInterceptor implements HandlerInterceptor{ //unimplemented methods comes here. Define the following method so that it //will handle the request before it is passed to the controller. @Override public boolean preHandle(HttpServletRequest request,HttpServletResponse response){ //your custom logic here. return true; } } 
  2. Definir una clase de configuración

     @Configuration public class MyConfig extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(new MyCustomInterceptor()).addPathPatterns("/**"); } } 
  3. Eso es. Ahora todas sus solicitudes pasarán por la lógica definida bajo el método preHandle () de MyCustomInterceptor.

También podría considerar agregar una dependencia de SpringSandwich que le permita anotar directamente en sus controladores qué interceptores aplicar, de la misma manera que anota sus rutas de URL (publicación: soy el autor).

https://github.com/arikast/springsandwich

Tenía el mismo problema de que WebMvcConfigurerAdapter estaba en desuso. Cuando busqué ejemplos, casi no encontré ningún código implementado. Aquí hay una pieza de código de trabajo.

crear una clase que amplíe HandlerInterceptorAdapter

 import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import me.rajnarayanan.datatest.DataTestApplication; @Component public class EmployeeInterceptor extends HandlerInterceptorAdapter { private static final Logger logger = LoggerFactory.getLogger(DataTestApplication.class); @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { String x = request.getMethod(); logger.info(x + "intercepted"); return true; } } 

luego implementar la interfaz WebMvcConfigurer

 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import me.rajnarayanan.datatest.interceptor.EmployeeInterceptor; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Autowired EmployeeInterceptor employeeInterceptor ; @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(employeeInterceptor).addPathPatterns("/employee"); } }