ajouter des intercepteurs de requêtes http

Quelle est la bonne façon d'ajouter les intercepteurs HttpRequest dans l'application de démarrage à ressort? Ce que je veux faire, c'est enregistrer les requêtes et les réponses pour chaque requête http.

La documentation

sur les amorces à ressort ne couvre pas du tout ce sujet. ( http://docs.spring.io/spring-boot/docs/current/reference/htmlsingle / )

j'ai trouvé quelques échantillons de web sur la façon de faire la même chose avec les versions plus anciennes de printemps, mais ceux travaillent avec applicationcontexte.XML. S'il vous plaît aider.

61
demandé sur riship89 2015-06-27 01:19:55

5 réponses

puisque vous utilisez la botte de ressort, je suppose que vous préférez compter sur la configuration automatique du ressort lorsque cela est possible. Pour ajouter une configuration personnalisée supplémentaire comme vos intercepteurs, il suffit de fournir une configuration 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 .

108
répondu ikumen 2018-04-17 13:58:32

WebMvcConfigurerAdapter sera déprécié avec le printemps 5. De son Javadoc :

@déprécié à partir de 5.0 {@link WebMvcConfigurer} a des méthodes par défaut (made possible par une baseline Java 8) et peut être implémenté directement sans avoir besoin de cet adaptateur

comme indiqué ci-dessus, ce que vous devez faire est la mise en œuvre de WebMvcConfigurer et la suppression de addInterceptors méthode.

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyCustomInterceptor());
    }
}
40
répondu sedooe 2017-08-15 17:10:59

pour ajouter interceptor à une application de botte à ressort, faites ce qui 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 sous la méthode preHandle() de MyCustomInterceptor.

15
répondu sunitha 2017-02-23 08:55:30

vous pourriez également envisager d'ajouter une dépendance SpringSandwich qui vous permet d'annoter directement dans vos controllers quels intercepteurs appliquer, un peu de la même manière que vous annotez vos routes url (divulgation: je suis l'auteur).

https://github.com/arikast/springsandwich

5
répondu Magnus 2016-11-30 16:32:05

j'ai eu le même numéro de WebMvcConfigurerAdapter étant déprécié. Quand j'ai cherché des exemples, je n'ai presque pas 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 {

            String 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");
    }
}
2
répondu user2532195 2017-10-03 17:03:48