Java >> Tutoriel Java >  >> Tag >> Spring

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

  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 ça. Désormais, toutes vos requêtes passeront par la logique définie dans la méthode preHandle() de MyCustomInterceptor.


Balise Java