Dans Spring Framework, la classe Controller avec l'annotation \ @Controller reçoit la demande et renvoie la réponse. DispatcherServlet extrait la classe Controller de l'URL de la requête et l'exécute. Inerceptor est un processus d'interruption qui est appelé avant et après le traitement de l'écran et à la toute fin de la requête. Avec Inerceptor, vous pouvez ajouter un traitement avant et après l'exécution du contrôleur. Par exemple, utilisez Interceptor pour afficher l'adresse IP de la source d'accès dans le journal.
Citation [soracane 01. Concept de base: flux de traitement global](https://sites.google.com/site/soracane/home/springnitsuite/spring-mvc/1-ji-ben-gai-nian-quan-ti-dena-chu- lifuro)
Réel: interface org.springframework.web.servlet.HandlerInterceptor DispatcherServlet exécute l'interface HandlerInterceptor.
Méthode | Valeur de retour | Moment d'exécution |
---|---|---|
preHandle | booean | Avant d'exécuter Controller |
postHandle | void | Après l'exécution de la location de vue Controller-Before |
afterCompletion | void | voir Après la location |
Référence API HandlerInterceptor
Essayez de sortir l'adresse IP accessible à l'aide d'Interceptor dans un fichier journal.
<Procédure>
Pour le projet Spring MVC, utilisez celui créé par la procédure suivante. Projet Spring MVC
Informations sur la version de chaque module vérifiées cette fois
module | version |
---|---|
STS | 3.9.9 |
JDK | 1.8.0_221 |
Tomcat | 8.5 |
SpringFramework | 3.1.1 |
Thymeleaf | 2.1.6 |
Créez une classe d'implémentation pour org.springframework.web.servlet.HandlerInterceptor et Sortez l'adresse IP dans la méthode preHandle.
HogeIntercepter.java
package hogehoge;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class HogeIntercepter implements HandlerInterceptor {
private static final Logger logger = LoggerFactory.getLogger(HogeIntercepter.class);
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
//TODO talon de méthode généré automatiquement
logger.info("URI:" + request.getRequestURI());
logger.info("Adresse IP:" + request.getRemoteAddr());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
//TODO talon de méthode généré automatiquement
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
//TODO talon de méthode généré automatiquement
}
}
Définissez un intercepteur dans applicationContext.xml.
applicationContext.xml
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
・
・
・
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**" />
<beans:bean class="hogehoge.HogeIntercepter" />
</mvc:interceptor>
</mvc:interceptors>
</beans:beans>