In Spring Framework empfängt die Controller-Klasse mit der Annotation \ @Controller die Anforderung und gibt die Antwort zurück. DispatcherServlet extrahiert die Controller-Klasse aus der Anforderungs-URL und führt sie aus. Inerceptor ist ein Interrupt-Prozess, der vor und nach der Bildschirmverarbeitung und ganz am Ende der Anforderung aufgerufen wird. Mit Inerceptor können Sie die Verarbeitung vor und nach der Ausführung des Controllers hinzufügen. Verwenden Sie beispielsweise Interceptor, um die IP-Adresse der Zugriffsquelle in das Protokoll auszugeben.
Zitat [Soracane 01. Grundkonzept: Gesamtverarbeitungsablauf](https://sites.google.com/site/soracane/home/springnitsuite/spring-mvc/1-ji-ben-gai-nian-quan-ti-dena-chu- lifuro)
Tatsächlich: org.springframework.web.servlet.HandlerInterceptor-Schnittstelle DispatcherServlet führt die HandlerInterceptor-Schnittstelle aus.
Methode | Rückgabewert | Ausführungszeitpunkt |
---|---|---|
preHandle | booean | Vor dem Ausführen von Controller |
postHandle | void | Nach dem Ausführen der Controller-Before-View-Vermietung |
afterCompletion | void | Ansicht Nach dem Mieten |
HandlerInterceptor API-Referenz
Versuchen Sie, die IP-Adresse, auf die mit Interceptor zugegriffen wird, in eine Protokolldatei auszugeben.
Verwenden Sie für das Spring MVC-Projekt das nach dem folgenden Verfahren erstellte. Spring MVC Project
Die Versionsinformationen der einzelnen Module wurden diesmal überprüft.
Modul | version |
---|---|
STS | 3.9.9 |
JDK | 1.8.0_221 |
Tomcat | 8.5 |
SpringFramework | 3.1.1 |
Thymeleaf | 2.1.6 |
Erstellen Sie eine Implementierungsklasse für org.springframework.web.servlet.HandlerInterceptor und Geben Sie die IP-Adresse in der preHandle-Methode aus.
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 automatisch generierter Methodenstub
logger.info("URI:" + request.getRequestURI());
logger.info("IP Adresse:" + request.getRemoteAddr());
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) throws Exception {
//TODO automatisch generierter Methodenstub
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
//TODO automatisch generierter Methodenstub
}
}
Definieren Sie einen Interceptor in 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>