
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?

Was ist die Best Practice, in welchen Anwendungsfällen sollte sie eingesetzt werden? In diesem Bild wo funktioniert Filter
s und Interceptor
S?

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.xml
ein
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.

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.

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 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
9944500cookie-checkUnterschied zwischen Interceptor und Filter in Spring MVCyes