démarrage du spring en ajoutant des intercepteurs de requêtes http

Quelle est la bonne façon d’append des intercepteurs HttpRequest dans une application Spring Boot? Ce que je veux faire, c’est enregistrer les demandes et les réponses pour chaque requête http.

La documentation de démarrage du spring ne couvre pas ce sujet du tout. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/ )

J’ai trouvé des exemples Web sur la façon de faire la même chose avec les anciennes versions de Spring, mais ceux-ci fonctionnent avec applicationcontext.xml. S’il vous plaît aider.

Puisque vous utilisez Spring Boot, je suppose que vous préférez vous fier à la configuration automatique de Spring dans la mesure du possible. Pour append une configuration personnalisée supplémentaire telle que vos intercepteurs, fournissez simplement une configuration ou un bean de WebMvcConfigurerAdapter .

Voici un exemple de classe de configuration:

 @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() { ... }); } } 

NOTE Ne pas annoter cela avec @EnableWebMvc, si vous souhaitez conserver la configuration automatique de Spring Boots pour mvc .

WebMvcConfigurerAdapter sera obsolète avec Spring 5. De son Javadoc :

@déclaré à partir de la version 5.0 {@link WebMvcConfigurer} a des méthodes par défaut (rendues possibles par une ligne de base Java 8) et peut être implémenté directement sans avoir besoin de cet adaptateur

Comme indiqué ci-dessus, vous devez implémenter WebMvcConfigurer et addInterceptors méthode addInterceptors .

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

Pour append un intercepteur à une application de démarrage à ressort, procédez comme suit:

  1. Créer une classe d’intercepteur

     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. Définir une classe de configuration

     @Configuration public class MyConfig extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(new MyCustomInterceptor()).addPathPatterns("/**"); } } 
  3. C’est tout. Maintenant, toutes vos requêtes passeront par la logique définie par la méthode preHandle () de MyCustomInterceptor.

Vous pourriez également envisager d’append une dépendance SpringSandwich qui vous permet d’annoter directement dans vos contrôleurs les intercepteurs à appliquer, de la même manière que vous annotez vos itinéraires d’URL (divulgation: je suis l’auteur).

https://github.com/arikast/springsandwich

Le même problème de WebMvcConfigurerAdapter était obsolète. Lorsque j’ai cherché des exemples, j’ai à peine trouvé de code implémenté. Voici un morceau de code de travail.

créer une classe qui étend 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 { Ssortingng x = request.getMethod(); logger.info(x + "intercepted"); return true; } } 

puis implémenter l’interface 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"); } }