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 documentationsur 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.
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 .
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());
}
}
pour ajouter interceptor à une application de botte à ressort, faites ce qui 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 tout. Maintenant toutes vos requêtes passeront par la logique définie sous la méthode preHandle() de MyCustomInterceptor.
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).
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");
}
}