Inhaltsverzeichnis
Einführung
Das Konzept des Interceptors
Wie der Interceptor funktioniert
Implementierung eines benutzerdefinierten Interceptors
XML-Konfigurationsmethode
注解方式配置拦截器
Heim Java javaLernprogramm Entdecken Sie das Implementierungsprinzip von Spring Interceptor

Entdecken Sie das Implementierungsprinzip von Spring Interceptor

Jan 11, 2024 pm 03:18 PM
spring 实现机制 拦截器

Entdecken Sie das Implementierungsprinzip von Spring Interceptor

Enthüllung des Implementierungsmechanismus von Spring Interceptor

Einführung

Bei der Entwicklung von Webanwendungen müssen wir häufig bestimmte Vorgänge ausführen, bevor oder nachdem die Anforderung den Controller erreicht. Authentifizieren Sie beispielsweise Benutzer, zeichnen Sie Protokolle auf, behandeln Sie Ausnahmen usw. Das Spring-Framework stellt uns Interceptoren (Interceptors) zur Verfügung, mit denen Interceptors Anforderungen und Antworten vor- und nachbearbeiten können.

Dieser Artikel befasst sich mit dem Implementierungsmechanismus von Spring Interceptor. Wir werden verstehen, was Interceptoren sind, wie sie funktionieren, und anhand spezifischer Codebeispiele zeigen, wie benutzerdefinierte Interceptoren implementiert werden.

Das Konzept des Interceptors

Interceptor ist ein Mechanismus im Spring-Framework für die Vor- und Nachbearbeitung von Anfragen. Es ähnelt Filtern in Servlets, aber im Gegensatz zu Filtern basieren Interceptoren auf Methodenebene. Es kann Methoden im angegebenen Controller abfangen und benutzerdefinierte Logik ausführen, bevor und nachdem die Methode ausgeführt wird. Interceptoren können uns dabei helfen, einige allgemeine Verarbeitungen zu implementieren, die nichts mit der Geschäftslogik zu tun haben, und die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern.

Wie der Interceptor funktioniert

Der Interceptor wird durch AOP (Aspect Oriented Programming) implementiert. Spring Interceptor basiert auf der HandlerInterceptor-Schnittstelle, die drei Methoden definiert: preHandle, postHandle und afterCompletion. Der spezifische Arbeitsablauf ist wie folgt:

  1. Wenn der Client eine Anfrage an DispatcherServlet sendet, findet DispatcherServlet das entsprechende HandlerMapping basierend auf der angeforderten URL und ruft die entsprechende HandlerExecutionChain ab.
  2. HandlerExecutionChain enthält eine Reihe von HandlerInterceptor.
  3. DispatcherServlet ruft nacheinander die preHandle-Methode jedes Interceptors auf und überprüft den Rückgabewert der Methode.

    • Wenn „true“ zurückgegeben wird, setzt die Anforderung die Verarbeitung fort und gibt die preHandle-Methode des nächsten Interceptors ein.
    • Wenn false zurückgegeben wird, wird die Anfrage hier unterbrochen und an den Client zurückgegeben.
  4. Wenn die preHandle-Methoden aller Interceptoren true zurückgeben, ruft DispatcherServlet die handleRequest-Methode des Handler-Objekts in HandlerExecutionChain auf.
  5. Das Handler-Objekt in HandlerExecutionChain führt Geschäftslogik aus und gibt ModelAndView zurück.
  6. DispatcherServlet ruft nacheinander die postHandle-Methode jedes Interceptors auf und übergibt ModelAndView an ihn.
  7. Die postHandle-Methode des Interceptors kann ModelAndView ändern und verbessern.
  8. DispatcherServlet übergibt ModelAndView an ViewResolver zum Parsen und Rendern der Ansicht.
  9. Nachdem die Ansicht gerendert wurde, ruft DispatcherServlet nacheinander die afterCompletion-Methode jedes Interceptors auf, um einige Ressourcen weiter zu bereinigen.

Implementierung eines benutzerdefinierten Interceptors

Im Folgenden wird anhand eines konkreten Beispiels gezeigt, wie ein benutzerdefinierter Interceptor implementiert wird.

public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //  在方法执行之前进行逻辑处理
        System.out.println("拦截器preHandle方法执行");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 在方法执行之后进行逻辑处理
        System.out.println("拦截器postHandle方法执行");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        // 在视图渲染完成后进行逻辑处理
        System.out.println("拦截器afterCompletion方法执行");
    }
}
Nach dem Login kopieren

Im obigen Code haben wir die HandlerInterceptor-Schnittstelle implementiert und drei ihrer Methoden überschrieben. In der preHandle-Methode können wir einige Vorverarbeitungen durchführen; in der postHandle-Methode können wir ModelAndView ändern und verbessern; in der afterCompletion-Methode können wir einige Ressourcenbereinigungsvorgänge durchführen.

Als nächstes müssen wir den benutzerdefinierten Interceptor im Spring-Container konfigurieren. Dies kann durch XML-Konfiguration oder Annotationen erreicht werden.

XML-Konfigurationsmethode

Fügen Sie die folgende Konfiguration in der Spring-Konfigurationsdatei hinzu:

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**" />
        <mvc:exclude-mapping path="/login" />
        <bean class="com.example.MyInterceptor" />
    </mvc:interceptor>
</mvc:interceptors>
Nach dem Login kopieren

In der obigen Konfiguration verwenden wir das Tag <mvc:interceptor>, um den Interceptor zu definieren, und übergeben < Das Tag code><mvc:mapping> gibt den abzufangenden URL-Pfad an. Verwenden Sie das Tag <mvc:exclude-mapping>, um einige URL-Pfade auszuschließen, die nicht abgefangen werden müssen. <mvc:interceptor>标签来定义拦截器,并通过<mvc:mapping>标签指定要拦截的URL路径。使用<mvc:exclude-mapping>标签来排除一些不需要拦截的URL路径。

注解方式配置拦截器

在拦截器类上添加@Component注解,并使用@Order

Konfigurieren Sie den Interceptor mithilfe von Annotationen.

Fügen Sie die Annotation @Component zur Interceptor-Klasse hinzu und verwenden Sie die Annotation @Order, um die Ausführungsreihenfolge des Interceptors anzugeben.

@Component
@Order(1)
public class MyInterceptor implements HandlerInterceptor {
    // 省略代码
}
Nach dem Login kopieren

Fügen Sie die folgende Konfiguration in der Konfigurationsklasse von Spring hinzu:

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Autowired
    private MyInterceptor myInterceptor;
    
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
    }
}
Nach dem Login kopieren
In der obigen Konfiguration fügen wir den Interceptor zur Interceptor-Registrierung hinzu, indem wir die WebMvcConfigurer-Schnittstelle implementieren und die Methode addInterceptors darin neu schreiben.

Fazit🎜🎜Durch diesen Artikel haben wir das Konzept und das Funktionsprinzip von Spring-Interceptoren verstanden und anhand spezifischer Codebeispiele gezeigt, wie benutzerdefinierte Interceptoren implementiert werden. Interceptoren sind eine sehr wichtige Funktion im Spring-Framework, die uns dabei helfen kann, eine gemeinsame Verarbeitungslogik zu implementieren und die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern. Ich hoffe, dieser Artikel hat Ihnen beim Verständnis von Spring Interceptors geholfen. 🎜

Das obige ist der detaillierte Inhalt vonEntdecken Sie das Implementierungsprinzip von Spring Interceptor. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Ein neues Programmierparadigma, wenn Spring Boot auf OpenAI trifft Feb 01, 2024 pm 09:18 PM

Im Jahr 2023 ist die KI-Technologie zu einem heißen Thema geworden und hat enorme Auswirkungen auf verschiedene Branchen, insbesondere im Programmierbereich. Die Bedeutung der KI-Technologie wird den Menschen zunehmend bewusst, und die Spring-Community bildet da keine Ausnahme. Mit der kontinuierlichen Weiterentwicklung der GenAI-Technologie (General Artificial Intelligence) ist es entscheidend und dringend geworden, die Erstellung von Anwendungen mit KI-Funktionen zu vereinfachen. Vor diesem Hintergrund entstand „SpringAI“ mit dem Ziel, den Prozess der Entwicklung von KI-Funktionsanwendungen zu vereinfachen, ihn einfach und intuitiv zu gestalten und unnötige Komplexität zu vermeiden. Durch „SpringAI“ können Entwickler einfacher Anwendungen mit KI-Funktionen erstellen, wodurch diese einfacher zu verwenden und zu bedienen sind.

Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Verwenden Sie Spring Boot und Spring AI, um generative Anwendungen für künstliche Intelligenz zu erstellen Apr 28, 2024 am 11:46 AM

Als Branchenführer bietet Spring+AI durch seine leistungsstarke, flexible API und erweiterte Funktionen führende Lösungen für verschiedene Branchen. In diesem Thema werden wir uns mit den Anwendungsbeispielen von Spring+AI in verschiedenen Bereichen befassen. Jeder Fall wird zeigen, wie Spring+AI spezifische Anforderungen erfüllt, Ziele erreicht und diese LESSONSLEARNED auf ein breiteres Anwendungsspektrum ausdehnt. Ich hoffe, dieses Thema kann Sie dazu inspirieren, die unendlichen Möglichkeiten von Spring+AI tiefer zu verstehen und zu nutzen. Das Spring-Framework hat eine mehr als 20-jährige Geschichte im Bereich der Softwareentwicklung, und seit der Veröffentlichung der Spring Boot 1.0-Version sind 10 Jahre vergangen. Nun kann niemand diesen Frühling bestreiten

Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Was sind die Implementierungsmethoden für programmatische Frühlingstransaktionen? Jan 08, 2024 am 10:23 AM

So implementieren Sie programmgesteuerte Spring-Transaktionen: 1. Verwenden Sie TransactionCallback und TransactionCallbackWithoutResult; 4. Verwenden Sie TransactionTemplate in Kombination mit @Transactional;

Entmystifizierung des Abfangmechanismus in Golang Entmystifizierung des Abfangmechanismus in Golang Apr 08, 2024 am 08:39 AM

Interceptor ist ein Entwurfsmuster, das das Einfügen benutzerdefinierten Verhaltens vor und nach der Methodenausführung ermöglicht. In Go kann es über Net/http-Middleware implementiert werden. Es bietet die Vorteile von Skalierbarkeit, Wiederverwendbarkeit, Testbarkeit usw. und kann in Szenarien wie Authentifizierung, Autorisierung, Caching, Protokollierung und benutzerdefinierter Fehlerbehandlung verwendet werden.

Die 7 am häufigsten verwendeten Anmerkungen in Spring, der mächtigsten Organisation der Geschichte! Die 7 am häufigsten verwendeten Anmerkungen in Spring, der mächtigsten Organisation der Geschichte! Jul 26, 2023 pm 04:38 PM

Mit der Aktualisierung und Iteration der Technologie begann Java5.0, Anmerkungen zu unterstützen. Als führendes Framework in Java hat Spring seit der Aktualisierung auf Version 2.5 langsam damit begonnen, die XML-Konfiguration aufzugeben, und es werden mehr Annotationen zur Steuerung des Spring-Frameworks verwendet.

So legen Sie die Transaktionsisolationsstufe im Frühjahr fest So legen Sie die Transaktionsisolationsstufe im Frühjahr fest Jan 26, 2024 pm 05:38 PM

So legen Sie die Transaktionsisolationsstufe in Spring fest: 1. Verwenden Sie die Annotation @Transactional. 3. Legen Sie sie in der Spring-Konfigurationsdatei fest. 4. Legen Sie sie in der Java-Konfigurationsklasse fest. Detaillierte Einführung: 1. Verwenden Sie die Annotation @Transactional, fügen Sie die Annotation @Transactional zu der Klasse oder Methode hinzu, die eine Transaktionsverwaltung erfordert, und legen Sie die Isolationsstufe im Attribut fest. 2. In der Spring-Konfigurationsdatei usw.

Frühlingsanmerkung enthüllt: Analyse gängiger Anmerkungen Frühlingsanmerkung enthüllt: Analyse gängiger Anmerkungen Dec 30, 2023 am 11:28 AM

Spring ist ein Open-Source-Framework, das viele Anmerkungen bereitstellt, um die Java-Entwicklung zu vereinfachen und zu verbessern. In diesem Artikel werden häufig verwendete Spring-Annotationen ausführlich erläutert und spezifische Codebeispiele bereitgestellt. @Autowired: Die Autowired-Annotation @Autowired kann verwendet werden, um Beans im Spring-Container automatisch zu verdrahten. Wenn wir die Annotation @Autowired verwenden, wenn Abhängigkeiten erforderlich sind, findet Spring passende Beans im Container und fügt sie automatisch ein. Der Beispielcode lautet wie folgt: @Auto

Anwendung des JUnit-Unit-Test-Frameworks in Spring-Projekten Anwendung des JUnit-Unit-Test-Frameworks in Spring-Projekten Apr 18, 2024 pm 04:54 PM

JUnit ist ein weit verbreitetes Java-Unit-Test-Framework in Spring-Projekten und kann mit den folgenden Schritten angewendet werden: JUnit-Abhängigkeit hinzufügen: org.junit.jupiterjunit-jupiter5.8.1test Testfälle schreiben: Verwenden Sie @ExtendWith(SpringExtension.class), um die Erweiterung zu aktivieren. Verwenden Sie @Autowired-Inject-Beans, verwenden Sie @BeforeEach und @AfterEach zum Vorbereiten und Bereinigen und markieren Sie Testmethoden mit @Test.

See all articles