Zitiert aus HandlerIntercepter
‚s javadoc:
HandlerInterceptor
ist im Grunde ähnlich wie ein Servlet Filter
, aber in Gegensatz zu dieser es erlaubt nur individuelle Vorbearbeitung mit der Möglichkeit, das Verbot der Durchführung der Handler selbst und benutzerdefinierte Post-Processing. Filter sind leistungsfähiger, zum Beispiel erlauben sie Austausch der Anfrage und Antwort-Objekte, die über die Kette weitergegeben werden. Beachten Sie, dass ein Filter im Anwendungskontext in web.xml
, HandlerInterceptor
konfiguriert wird.
als Richtwerte für feinkörnige Handler bezogenen Vorverarbeitung Aufgaben sind Kandidaten für HandlerInterceptor
Implementierungen, insbesondere einkalkuliert-out gemeinsame Kontrollen Handler-Code und Autorisierung. Auf der andererseits ist eine Filter
gut für den Inhalt der Anfrage geeignet und Anzeigen Content-Handling, wie Multipart-Formulare und GZIP-Komprimierung. Diese zeigt typischerweise, wenn man den Filter auf bestimmte Inhalte (z. B. Bilder) oder auf alle Anfragen abbilden muss.
Mit diesem wird gesagt:
Wo ist der Unterschied zwischen PostHandle() in Interceptor und doFilter() in Filter?
postHandle
werden nach dem Aufruf der Prozedurmethode aufgerufen, aber bevor die Ansicht gerendert wird. So können Sie der Ansicht weitere Modellobjekte hinzufügen, aber Sie können nicht die HttpServletResponse
ändern, da es bereits festgelegt wurde. doFilter
ist viel vielseitiger als die postHandle
. Sie können die Anfrage oder Antwort ändern und an die Kette übergeben oder sogar die Anfrageverarbeitung blockieren.
Auch in preHandle
und postHandle
Methoden haben Sie Zugriff auf die HandlerMethod
, die die Anfrage verarbeitet. So können Sie eine Pre-Post-Verarbeitungslogik hinzufügen, die auf dem Handler selbst basiert. Sie können beispielsweise eine Logik für Handlermethoden hinzufügen, die Anmerkungen enthalten.
Was ist die beste Praxis in welchen Anwendungsfällen sollte es verwendet werden?
Wie die Doc sagte, feinkörnig Handler bezogenen Vorverarbeitung Aufgaben sind Kandidaten für HandlerInterceptor
Implementierungen, besonders einkalkuliert-out gemeinsamen Handler-Code und Berechtigungsprüfungen. Auf der anderen Seite ist ein Filter
gut geeignet für Anfrage Inhalt und Ansicht Content-Handling, wie Multipart-Formulare und GZIP-Komprimierung. Dies zeigt sich typischerweise, wenn der Filter bestimmten Inhaltstypen (z. B. Bildern) oder allen Anforderungen zugeordnet werden muss.
Hinweis, dass ein Filter in web.xml konfiguriert wird, eine HandlerInterceptor im Anwendungskontext ??? Kannst du erklären? –
* 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 der alten 'web.xml' (Servlet 2.5 und ältere Versionen) oder dem neuen programmatischen Ansatz (Servlet 3+) registrieren. Da das 'HandlerIntercepter' nur eine Spring-Abstraktion ist, sollten Sie sich im Kontext des Frühlings registrieren. –
Der Filter bezieht sich auf die Servlet-API und HandlerIntercepter ist ein Spring-spezifisches Konzept. coorect! Aber was auch immer die Registrierung von web.xml ist Teil von 'WebApplication', das ist ein einzelner pro Dispatcher, so dass Servlet und Filter beide mit Kontext verbunden sind, ist es eine gute Übung, Interceptor und Filter mit' rootContext' zuzuordnen, wenn Sie mehrere Dispatcher alle können dasselbe teilen. –