Spring Boot Ajout d'intercepteurs de requête HTTP
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 ajouter une configuration personnalisée supplémentaire comme 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() {
...
});
}
}
REMARQUE ne l'annotez pas avec @EnableWebMvc, si vous souhaitez conserver la configuration automatique de Spring Boots pour mvc.
WebMvcConfigurerAdapter
sera obsolète avec Spring 5. À partir de son Javadoc :
@deprecated as of 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, ce que vous devez faire est d'implémenter WebMvcConfigurer
et en remplaçant addInterceptors
méthode.
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyCustomInterceptor());
}
}
Pour ajouter un intercepteur à une application Spring Boot, procédez comme suit
-
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; } }
-
Définir une classe de configuration
@Configuration public class MyConfig extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(new MyCustomInterceptor()).addPathPatterns("/**"); } }
-
C'est ça. Désormais, toutes vos requêtes passeront par la logique définie dans la méthode preHandle() de MyCustomInterceptor.