Aus HandlerIntercepter
dem Javadoc :
HandlerInterceptor
ähnelt im Grunde einem Servlet Filter
, ermöglicht jedoch im Gegensatz zu letzterem nur eine benutzerdefinierte Vorverarbeitung mit der Option, die Ausführung des Handlers selbst und eine benutzerdefinierte Nachbearbeitung zu verbieten. Filter sind leistungsfähiger, z. B. ermöglichen sie den Austausch der Anforderungs- und Antwortobjekte, die über die Kette weitergegeben werden. Beachten Sie, dass ein Filter in web.xml
a
HandlerInterceptor
im Anwendungskontext konfiguriert wird .
Als grundlegende Richtlinie sind feinkörnige Handler-bezogene Vorverarbeitungsaufgaben Kandidaten für HandlerInterceptor
Implementierungen, insbesondere ausgerechnete allgemeine Handler-Code- und Berechtigungsprüfungen. Auf der anderen Seite Filter
eignet sich a gut für die Bearbeitung von Anforderungsinhalten und zum Anzeigen von Inhalten, wie z. B. mehrteilige Formulare und GZIP-Komprimierung. Dies zeigt normalerweise, wann der Filter bestimmten Inhaltstypen (z. B. Bildern) oder allen Anforderungen zugeordnet werden muss.
Nachdem dies gesagt wurde:
Wo ist also der Unterschied zwischen Interceptor#postHandle()
und
Filter#doFilter()
?
postHandle
wird nach dem Aufruf der Handler-Methode, jedoch vor dem Rendern der Ansicht aufgerufen. Sie können der Ansicht also weitere Modellobjekte hinzufügen, diese jedoch nicht ändern, HttpServletResponse
da sie bereits festgeschrieben sind.
doFilter
ist viel vielseitiger als die postHandle
. Sie können die Anforderung oder Antwort ändern und an die Kette übergeben oder sogar die Anforderungsverarbeitung blockieren.
Außerdem haben Sie in preHandle
und postHandle
Methoden Zugriff auf die HandlerMethod
, die die Anforderung verarbeitet hat. Sie können also eine Vor- / Nachbearbeitungslogik basierend auf dem Handler selbst hinzufügen. Sie können beispielsweise eine Logik für Handlermethoden hinzufügen, die einige Anmerkungen enthalten.
Was ist die beste Vorgehensweise in welchen Anwendungsfällen?
Wie im Dokument erwähnt, sind feinkörnige Handler-bezogene Vorverarbeitungsaufgaben Kandidaten für HandlerInterceptor
Implementierungen, insbesondere ausgerechnete allgemeine Handler-Code- und Berechtigungsprüfungen. Auf der anderen Seite Filter
eignet sich a gut für die Bearbeitung von Anforderungsinhalten und zum Anzeigen von Inhalten, wie z. B. mehrteilige Formulare und GZIP-Komprimierung. Dies zeigt normalerweise, wann der Filter bestimmten Inhaltstypen (z. B. Bildern) oder allen Anforderungen zugeordnet werden muss.