Cet article étudie principalement l'introduction des intercepteurs dans SpringMVC, exemple de code, de configuration et d'autres contenus, comme suit.
Le processeur de SpringMVC Intercepteur est similaire au filtre du filtre dans le développement du servlet, qui est utilisé pour prétraiter et post-traitement du processeur. Cet article résume principalement comment l'intercepteur est défini dans SpringMVC, ainsi que l'exécution et l'utilisation de l'intercepteur.
Dans SpringMVC, définissez l'intercepteur pour implémenter l'interface HandlerInterceptor et implémenter les trois méthodes fournies dans l'interface, comme suit:
// Tester interceptor1public class handlerInterceptor1 implémente handlerInterceptor {@Override public boolean prehandle (httpservletRequest request, httpservletResponse réponse, object handler) lève exception {System.out.println ("handlerterceptor1 .... preandle"); // faux moyens intercept, pas downward exécution; Vraie signifie release return True;} @ Override public void posthandle (httpsservletRequest request, httpservletResponse réponse, handler d'objet, modelAndView ModelandView) lance l'exception {System.out.println ("HandlerInterceptor1..posthandle");} @ override vide after-fortsfetions (hTTPServlerse Handler d'objet, exception ex) lève une exception {System.out.println ("HandlerInterceptor1..AfterCompletion");}}Je vais faire une analyse simple pour ces trois méthodes:
Dans SpringMVC, l'intercepteur est configuré pour le handlermapping spécifique, c'est-à-dire que si un intercepteur est configuré dans un handlermapping, le gestionnaire est cartographié avec succès à travers le handlermapping finira par utiliser l'intercepteur. Par exemple, supposons que le mappeur que nous avons configuré dans le fichier de configuration soit org.springframework.web.servlet.handler.beannameUrlHandlerMapping, alors nous pouvons configurer l'intercepteur comme suit:
<Ean> <propriété name = "Interceptors"> <sist> <refEp bean = "handlerInterceptor1" /> <Ref bean = "handlerInterceptor2" /> </ist> </ propriété> </-bean> <bean id = "handlerInterceptor1" /> <bean id = "handlerInterceptor2" />
Donc, dans SpringMVC, comment configurer un intercepteur global? Comme mentionné ci-dessus, les intercepteurs de SpringMVC sont ciblés sur des mappeurs spécifiques. Pour résoudre ce problème, le framework SpringMVC injecte des intercepteurs globalement similaires dans chaque handlermapping, afin qu'ils puissent devenir des intercepteurs globaux. La configuration est la suivante:
<! - Configurer les intercepteurs -> <MVC: Interceptors> <! - Plusieurs intercepteurs, exécutés en séquence -> <mvc: interceptor> <mvc: mapping path = "/ **" /> <! - Intercenent toutes les URL, y compris Suburl Paths -> <fEAN /> </ mvc: Interceptor> <MVC: Interceptor> <Mv: MAPPINGAGE> <MVC: Interceptor> <Mv: MAPPINGMENT> path = "/ **" /> <bean /> </ mvc: interceptor>
Généralement, nous utilisons cette configuration, spécifions simplement l'URL à intercepter dans <MVC: Mapping>.
Écrivez deux intercepteurs, HandlerInterceptor2 et HandlerInterceptor3, selon la configuration ci-dessus. Ensuite, nous testerons l'exécution des trois intercepteurs et ferons un résumé connexe.
En d'autres termes, nous modifions la valeur de retour de la méthode de pré-mainde des trois intercepteurs à TRUE pour tester l'ordre d'exécution de l'intercepteur. Les résultats des tests sont les suivants:
HandlerInterceptor1….
HandlerInterceptor2….
HandlerInterceptor3….HandlerInterceptor3….
HandlerInterceptor2….
HandlerInterceptor1….HandlerInterceptor3….
HandlerInterceptor2….
HandlerInterceptor1….
Un résumé est effectué sur la base des résultats imprimés: lorsque tous les intercepteurs sont libérés, la méthode de pré-houle est exécutée dans l'ordre de configuration; tandis que les deux autres méthodes sont exécutées dans l'ordre de configuration.
Nous modifions la valeur de retour dans la méthode de pré-halte du troisième intercepteur en false, et les deux premiers sont toujours vrais, pour tester l'ordre d'exécution de l'intercepteur. Les résultats des tests sont les suivants:
HandlerInterceptor1….
HandlerInterceptor2….
HandlerInterceptor3….HandlerInterceptor2….
HandlerInterceptor1….
Faites un résumé en fonction des résultats imprimés:
1. Étant donné que les intercepteurs 1 et 2 sont libérés, la pré-haine de l'intercepteur 3 peut être exécutée. En d'autres termes, l'intercepteur précédent peut être libéré et le dernier intercepteur peut exécuter la pré-houle.
2. Interceptor 3 ne le libére pas, donc ses deux autres méthodes ne sont pas exécutées. Autrement dit, si un intercepteur ne le libére pas, ses deux autres méthodes ne seront pas exécutées.
3. Tant qu'il y a un intercepteur qui ne se libére pas, la méthode post-poste de tous les intercepteurs ne sera pas exécutée, mais tant que la pré-maintenance sera exécutée et libérée, la méthode AfterCompletion sera exécutée.
En fait, vous pouvez vous référer à la situation ci-dessus. C'est un cas spécial. Jetons un coup d'œil aux résultats en cours d'exécution:
HandlerInterceptor1….
De toute évidence, seule la méthode de pré-mainde du premier intercepteur a été exécutée. Étant donné qu'aucun d'entre eux n'a été libéré, aucun d'entre eux n'a exécuté la méthode post-poste et la méthode après la récomplétion.
Dans le deuxième cas, par exemple, si vous souhaitez écrire une logique de traitement d'exception unifiée, alors l'intercepteur doit être placé dans la première position de la chaîne d'intercepteur et doit être libéré, car seul après la récomplétion sera exécuté, et s'il est placé dans la première position de la chaîne d'intercepteur, la méthode après obstacle sera exécutée en dernier, de sorte que la logique de la chaîne d'exception unifiée peut être exécutée dans celle-ci.
Par exemple, connectez-vous à l'intercepteur d'authentification et placez-le dans la première position dans la liaison intercepteur (s'il y a une manipulation d'exception unifiée, il doit être placé derrière la manipulation de l'exception unifiée). L'intercepteur de vérification d'autorisation est placé après se connecter à l'intercepteur d'authentification (car l'autorisation n'est vérifiée qu'après la connexion).
Voici un intercepteur de vérification de connexion pour expliquer comment utiliser l'intercepteur de SpringMVC.
Tout d'abord, regardons les exigences: ce que nous voulons intercepter, ce que nous voulons faire lorsque nous interceptions. L'idée est la suivante:
1. URL de demande de l'utilisateur
2. L'intercepteur effectue une vérification d'interception. Si l'URL demandée est une adresse publique (URL qui peut être accessible sans se connecter), qu'il soit publié.
Si la session utilisateur n'existe pas, passez à la page de connexion.
Si la session utilisateur existe, libérez-la et continuez l'opération.
// Connexion dans @RequestMapping ("/ Login") Public String Login (HttpServLetRequest Request, String Username, String Motway) lève une exception {// en fait, vous devez correspondre à la base de données //...//here, supposer que le connexion est réussi httSession Session = USERNAM "Redirection: queryItems.action";} // login @RequestMapping ("/ Logout") public String Logout (httpServLetRequest request) lance l'exception {httpSession session = request.getSession (); session.invalidate (); return "redirect: queryitems.action";};}; // Test Interceptor 1Public classe LoginInterceptor implémente HandlerInterceptor {// Exécuter avant d'entrer dans la méthode du gestionnaire // peut être utilisé pour l'authentification d'identité et l'autorisation d'identité. Si l'authentification ne passe pas, cela signifie que l'utilisateur n'est pas connecté. Cette méthode doit l'intercepter et aucune autre exécution. Otherwise, @Override public Boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {//Get the requested urlString url = request.getRequestURI();//Direquire whether the url public address is public (configure the public address to the configuration file when actually used) // Here is a suppose that the public address is logged in to the submitted Adresse if (url.indexof ("login.action")> 0) {// Si la soumission de connexion est effectuée, relexez return true;} // juge sessionhttpSession session = request.getSession (); // fetch les informations d'identité de l'utilisateur de la session Username = (string) session.getAttribute ("username"); if (userName! que l'identité de l'utilisateur doit être vérifiée, passez à la page de connexion request.getRequestDispatcher ("/ web-inf / jsp / login.jsp").Configurez ensuite l'intercepteur:
<! - Configurer les intercepteurs -> <mvc: intercepteurs> <! - multiples intercepteurs, exécuter en séquence -> <mvc: interceptor> <mvc: mapping path = "/ **" /> <! - intercepter toutes les URL, y compris les chemins de bandes -> <Bean /> </ mvc: interceptor> <! - autres intercepteurs -> </ mv: intercepteurs>
De cette façon, lorsque nous demandons une URL, nous serons capturés par l'intercepteur que nous venons de définir, puis nous déterminerons s'il y a des informations utilisateur dans la session. Sinon, nous allons passer à la page de connexion et nous connecter:
<form action = "$ {pagecontext.request.contextPath} /login.action" Method = "post"> nom d'utilisateur: <entrée type = "text" name = "username" /> <br> mot de passe: <entrée type = "mot de passe" name = "mot de passe" /> <br> <entrée type = "soumis" name = "soumission" /> </ form>Il s'agit essentiellement de l'introduction de l'utilisation des intercepteurs.
Ce qui précède est tout le contenu de cet article sur l'explication détaillée de l'intercepteur dans SpringMVC et les exemples de code. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à d'autres sujets connexes sur ce site. S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!