Cet article présente principalement l'exemple de code d'utilisation simple de l'intercepteur Spring Boot. Les amis qui en ont besoin peuvent s'y référer
1 L'intercepteur Spring Boot par défaut est : <.>
HandlerInterceptorAdapterAbstractHandlerMapping
UserRoleAuthorizationInterceptor
LocaleChangeInterceptor
ThemeChangeInterceptor
2. L'implémentation d'un intercepteur personnalisé ne nécessite que 3 étapes :
1), créer notre propre classe d'intercepteur et implémenter HandlerInterceptorInterface .
2), créez une classe Javahéritez de WebMvcConfigurerAdapter et remplacez la méthode addInterceptors.
3), instanciez notre intercepteur personnalisé, puis ajoutez manuellement l'objet à la chaîne d'intercepteurs (ajoutée dans la méthode addInterceptors).3. Exemple de code
Code de classe IndexInterceptor.java :package com.example.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class IndexInterceptor implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println(">>>IndexInterceptor>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)"); } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println(">>>IndexInterceptor>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)"); } @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println(">>>IndexInterceptor>>>>>>>在请求处理之前进行调用(Controller方法调用之前)"); // 只有返回true才会继续向下执行,返回false取消当前请求 return true; } }
package com.example.interceptor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class IndexInterceptor2 implements HandlerInterceptor{ @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { System.out.println(">>>IndexInterceptor2>>>>>>>在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)"); } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception { System.out.println(">>>IndexInterceptor2>>>>>>>请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)"); } @Override public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { System.out.println(">>>IndexInterceptor2>>>>>>>在请求处理之前进行调用(Controller方法调用之前)"); // 只有返回true才会继续向下执行,返回false取消当前请求 return false; } }
package com.example.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import com.example.interceptor.IndexInterceptor; import com.example.interceptor.IndexInterceptor2; //只要能被springboot扫描到即可 @Configuration public class SimpleWebAppConfigurer extends WebMvcConfigurerAdapter{ @Override public void addInterceptors(InterceptorRegistry registry) { // 多个拦截器组成一个拦截器链 // addPathPatterns 用于添加拦截规则 // excludePathPatterns 用户排除拦截 registry.addInterceptor(new IndexInterceptor()).addPathPatterns("/**"); registry.addInterceptor(new IndexInterceptor2()).addPathPatterns("/**"); super.addInterceptors(registry); } }
4. Instructions d'analyse de l'intercepteur
preHandle** : Méthode de rappel de prétraitement pour implémenter le prétraitement du processeur (comme la vérification de connexion). Le troisième paramètre est le processeur de réponse (comme notre implémentation de contrôleur dans le chapitre précédent Valeur de retour : true signifie continuer le processus (comme l'appel) ; le prochain intercepteur ou processeur); false indique que le processus est interrompu (comme un échec de vérification de connexion) et ne continuera pas à appeler d'autres intercepteurs ou processeurs. À ce stade, nous devons le générer via la réponse. ; postHandle** : méthode de rappel de post-traitement pour implémenter le post-traitement du processeur (mais avant de rendre la vue), à ce moment nous pouvons passer modelAndView (Model et View Object ) traite les données ou les vues du modèle. modelAndView peut également être null.
afterCompletion** : méthode de rappel après le traitement de l'intégralité de la requête, c'est-à-dire rappelée lorsque la vue est rendue. Par exemple, dans la surveillance des performances, nous pouvons enregistrer l'heure de fin et afficher ici le temps de consommation, et peut également effectuer un nettoyage des ressources, similaire à finalement dans try-catch-finally, mais appelle uniquement afterCompletion** de l'intercepteur dont preHandle renvoie true dans la chaîne d'exécution du processeur. [Recommandations associées]1. 2.Analyse complète des annotations Java.
3.Manuel du didacticiel FastJson
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!