wake-up-neo.net

Spring HandlerInterceptor vs Servlet-Filter

HandlerInterceptor s in Spring kann jetzt so konfiguriert werden, dass es nur für bestimmte URLs mit <mvc:interceptors> Aufgerufen wird.

Servlet-Filter können dieselbe Funktionalität (Protokollierung, Sicherheit usw.) erzielen. Welches sollte man also verwenden?

Ich denke, mit Interceptors kann man ModelAndView Objekt verwenden, um mit Models zu arbeiten, so dass es mehr Vorteile hat. Kann jemand Szenarien entwerfen, in denen Filter oder Abfangjäger Vorteile gegenüber den anderen haben?

63
aces.

Das org.springframework.web.servlet.HanderInterceptor Interface JavaDoc selbst enthält zwei Absätze, in denen diese Frage behandelt wird:

HandlerInterceptor ähnelt grundsätzlich einem Servlet 2.3-Filter, ermöglicht jedoch im Gegensatz zu letzterem lediglich eine benutzerdefinierte Vorverarbeitung mit der Option, die Ausführung des Handlers selbst und eine benutzerdefinierte Nachverarbeitung zu untersagen. Filter sind leistungsfähiger und ermöglichen beispielsweise den Austausch von Anforderungs- und Antwortobjekten, die über die Kette weitergegeben werden. Beachten Sie, dass ein Filter in der Datei web.xml konfiguriert wird, einem HandlerInterceptor im Anwendungskontext.

Als grundlegende Richtlinie sind fein abgestimmte Vorverarbeitungsaufgaben im Zusammenhang mit Handlern Kandidaten für HandlerInterceptor-Implementierungen, insbesondere ausgerechnet allgemeine Code- und Berechtigungsprüfungen für Handler. Auf der anderen Seite eignet sich ein Filter gut für die Verarbeitung von Anforderungsinhalten und Ansichtsinhalten, z. B. für mehrteilige Formulare und die GZIP-Komprimierung. Dies zeigt in der Regel, wann der Filter bestimmten Inhaltstypen (z. B. Bildern) oder allen Anforderungen zugeordnet werden muss.

58
Ralph

Mit Spring Handler-Interceptors können Sie sich in mehr Teile des Anforderungslebenszyklus einklinken und erhalten dabei Zugriff auf weitere Informationen. Sie sind häufig enger an den Anforderungs-/Antwortzyklus gekoppelt als Filter.

Filter eignen sich besser, wenn Sie Ihre Anfrage/Antwort als Black-Box-System behandeln. Sie funktionieren unabhängig davon, wie das Servlet implementiert ist.

Wenn Sie Spring MVC verwenden, gibt es wenig Grund, eine neue Logik als Servlet-Filter zu schreiben. Alles, was Filter können, können Abfangjäger einfacher und eleganter.

Denken Sie auch daran, dass es Servlet-Filter schon viel länger als Interceptors gibt.

25
skaffman

Mit einem Spring Interceptor haben Sie Zugriff auf den Handler, was nützlich sein kann. Mit einem Spring Interceptor können Sie außerdem Logik ausführen, bevor die Ansicht gerendert wird und nachdem die Ansicht gerendert wurde.

4
smp7d