Unterschied zwischen Interceptor und Filter in Spring MVC

Lesezeit: 5 Minuten

Unterschied zwischen Interceptor und Filter in Spring MVC
rpieniazek

Ich bin etwas verwirrt Filter und Interceptor Zwecke.

Wie ich aus den Dokumenten verstanden habe, Interceptor wird zwischen Anfragen ausgeführt. Andererseits Filter wird vor dem Rendern der Ansicht, aber nach der vom Controller gerenderten Antwort ausgeführt.

Wo ist also der Unterschied zw postHandle() in Interceptor und doFilter() im Filter?

Frühlings-MVC-Schema

Was ist die Best Practice, in welchen Anwendungsfällen sollte sie eingesetzt werden? In diesem Bild wo funktioniert Filters und InterceptorS?

Unterschied zwischen Interceptor und Filter in Spring MVC
Ali Deghani

Von HandlerIntercepter‘S javadoc:

HandlerInterceptor ist im Grunde ähnlich wie ein Servlet Filter, aber im Gegensatz zu letzterem erlaubt es nur eine benutzerdefinierte Vorverarbeitung mit der Option, die Ausführung des Handlers selbst zu verbieten, und eine benutzerdefinierte Nachverarbeitung. Filter sind leistungsfähiger, zum Beispiel ermöglichen sie den Austausch der Anforderungs- und Antwortobjekte, die in der Kette weitergegeben werden. Beachten Sie, dass ein Filter in konfiguriert wird web.xmlein
HandlerInterceptor im Anwendungskontext.

Als grundlegende Richtlinie kommen feinkörnige handlerbezogene Vorverarbeitungsaufgaben infrage HandlerInterceptor Implementierungen, insbesondere ausgeklammerter allgemeiner Handler-Code und Berechtigungsprüfungen. Andererseits ist A Filter eignet sich gut zum Anfordern von Inhalten und Anzeigen von Inhalten, wie z. B. mehrteilige Formulare und GZIP-Komprimierung. Dies zeigt normalerweise, wenn man den Filter bestimmten Inhaltstypen (z. B. Bildern) oder allen Anforderungen zuordnen muss.

Damit sei gesagt:

Wo ist also der Unterschied zw Interceptor#postHandle() und
Filter#doFilter()?

postHandle wird nach dem Aufruf der Handler-Methode, aber vor dem Rendern der Ansicht aufgerufen. Sie können der Ansicht also weitere Modellobjekte hinzufügen, aber Sie können nicht ändere das HttpServletResponse da es bereits festgeschrieben ist.

doFilter ist viel vielseitiger als die postHandle. Sie können die Anfrage oder Antwort ändern und an die Kette weitergeben oder sogar die Anfrageverarbeitung blockieren.

Auch in preHandle und postHandle Methoden haben Sie Zugriff auf die HandlerMethod die die Anfrage bearbeitet hat. Sie können also Vor-/Nachverarbeitungslogik basierend auf dem Handler selbst hinzufügen. Beispielsweise können Sie eine Logik für Handlermethoden hinzufügen, die einige Anmerkungen haben.

Was ist die Best Practice, in welchen Anwendungsfällen sollte sie eingesetzt werden?

Wie das Dokument sagte, sind feinkörnige handlerbezogene Vorverarbeitungsaufgaben Kandidaten für HandlerInterceptor Implementierungen, insbesondere ausgeklammerter allgemeiner Handler-Code und Berechtigungsprüfungen. Andererseits ist A Filter eignet sich gut zum Anfordern von Inhalten und Anzeigen von Inhalten, wie z. B. mehrteilige Formulare und GZIP-Komprimierung. Dies zeigt normalerweise, wenn man den Filter bestimmten Inhaltstypen (z. B. Bildern) oder allen Anforderungen zuordnen muss.

  • Beachten Sie, dass ein Filter in web.xml konfiguriert wird, ein HandlerInterceptor im Anwendungskontext??? kannst du bitte erklären?

    Benutzer4768611

    26. Februar 2017 um 18:36 Uhr

  • Filter bezieht sich auf die Servlet-API und HandlerIntercepter ist ein Spring-spezifisches Konzept. Um einen Servlet-Filter zu registrieren, können Sie ihn entweder mit dem alten web.xml (Servlet 2.5 und ältere Versionen) oder der neue programmatische Ansatz (Servlet 3+). Seit der HandlerIntercepter nur eine Spring-Abstraktion ist, sollten Sie sich im Spring-Kontext registrieren

    – Ali Deghani

    26. Februar 2017 um 19:14 Uhr

  • Filter bezieht sich auf die Servlet-API und HandlerIntercepter ist ein Spring-spezifisches Konzept. koordinieren! aber was auch immer Ihre Registrierung per web.xml ist, gehört dazu WebApplication Dies ist pro Dispatcher einzeln, sodass Servlet und Filter beide mit Kontext verknüpft sind. Es ist eine gute Vorgehensweise, Interceptor und Filter damit zu verknüpfen rootContext Wenn Sie also mehrere Dispatcher haben, können alle dasselbe teilen.

    Benutzer4768611

    26. Februar 2017 um 19:23 Uhr

  • Welche Suite eignet sich besser für die Protokollierung von Anforderungen (Body, Headers)?

    – Lei Yang

    16. Dezember 2021 um 12:02 Uhr

1647104232 578 Unterschied zwischen Interceptor und Filter in Spring MVC
Manas Kumar Maharana

Filter: – Ein Filter ist, wie der Name schon sagt, eine Java-Klasse, die vom Servlet-Container für jede eingehende HTTP-Anforderung und für jede HTTP-Antwort ausgeführt wird. Auf diese Weise können eingehende HTTP-Anforderungen verwaltet werden, bevor sie die Ressource erreichen, z. B. eine JSP-Seite, ein Servlet oder eine einfache statische Seite. Auf die gleiche Weise ist es möglich, die ausgehende HTTP-Antwort nach der Ressourcenausführung zu verwalten.

Abfangjäger: – Spring Interceptors ähneln Servlet-Filtern, agieren jedoch im Spring-Kontext und sind daher leistungsfähig, um HTTP-Anfragen und -Antworten zu verwalten, aber sie können ein ausgefeilteres Verhalten implementieren, da sie auf den gesamten Spring-Kontext zugreifen können.

  • Quelle: mkjava.com/tutorial/filter-vs-interceptor Quelle angeben müssen

    – Premraj

    29. August 2019 um 3:07 Uhr


  • Was ist mit Spring Security Filter, es gibt Ihnen auch Spring Context.

    – Lieben

    29. Juni 2020 um 4:51 Uhr

  • aktualisierte Quelle: mkjava.com/tutorial/filter-vs-interceptor.html

    – Dexter

    18. April 2021 um 16:57 Uhr

  • “wie der Name schon sagt”… es deutet aber nicht wirklich darauf hin, oder?

    – Simon Forsberg

    22. Juni 2021 um 15:07 Uhr

1647104233 128 Unterschied zwischen Interceptor und Filter in Spring MVC
Satyam

Ein HandlerInterceptor gibt Ihnen eine feinkörnigere Kontrolle als ein Filter, da Sie Zugriff auf den eigentlichen Ziel-“Handler” haben – das bedeutet, dass jede Aktion, die Sie ausführen, je nachdem, was die Anfrage tatsächlich tut, variieren kann (wohingegen der Servlet-Filter allgemein angewendet wird alle Anfragen – kann nur die Parameter jeder Anfrage berücksichtigen). Der Handler-Interceptor bietet auch 3 verschiedene Methoden, sodass Sie Verhalten anwenden können, bevor Sie einen Handler aufrufen, nachdem der Handler abgeschlossen ist, aber vor dem Rendern der Ansicht (wobei Sie das Rendern der Ansicht sogar ganz umgehen können) oder nachdem die Ansicht selbst gerendert wurde. Außerdem können Sie verschiedene Interceptors für verschiedene Gruppen von Handlern einrichten – die Interceptors werden in der Handlerzuordnung konfiguriert, und es kann mehrere Handlerzuordnungen geben.

Wenn Sie also etwas ganz Allgemeines tun müssen (z. B. alle Anfragen protokollieren), ist ein Filter ausreichend – aber wenn das Verhalten vom Ziel-Handler abhängt oder Sie etwas zwischen der Anfragebehandlung und dem Rendern der Ansicht tun möchten, dann die HandlerInterceptor bietet diese Flexibilität.

Von baeldung:

filter_vs_interceptors

Filter fangen Anfragen ab, bevor sie das DispatcherServlet erreichen, was sie ideal für grobkörnige Aufgaben macht, wie zum Beispiel:

Authentication
Logging and auditing
Image and data compression
Any functionality we want to be decoupled from Spring MVC

HandlerIntercepors hingegen fängt Anfragen zwischen dem DispatcherServlet und unseren Controllern ab. Dies erfolgt innerhalb des Spring MVC-Frameworks, das Zugriff auf die Objekte Handler und ModelAndView bietet. Dies reduziert Duplikate und ermöglicht feinkörnigere Funktionen wie:

Handling cross-cutting concerns such as application logging
Detailed authorization checks
Manipulating the Spring context or model

994450cookie-checkUnterschied zwischen Interceptor und Filter in Spring MVC

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy