mvc - Spring HandlerInterceptor vs Servlet Filter




spring mvc vs spring boot (2)

HandlerInterceptor im Frühjahr können jetzt so konfiguriert werden, dass sie nur bei bestimmten URLs mit <mvc:interceptors> .

Servlet-Filter können die gleiche Funktionalität (Protokollierung, Sicherheit usw.) erreichen. Also welches sollte man benutzen?

Ich denke, mit Interceptors kann man das ModelAndView Objekt verwenden, um mit Modellen zu arbeiten, so dass es mehr Vorteile bietet. Kann jemand Szenarien zeichnen, in denen Filter oder Interzeptoren Vorteile gegenüber dem anderen haben?


Die Schnittstelle JavaDoc selbst hat zwei Absätze, die diese Frage diskutieren:

HandlerInterceptor ist im Prinzip einem Servlet 2.3 Filter ähnlich, aber im Gegensatz zu letzterem erlaubt es lediglich eine benutzerdefinierte Vorverarbeitung mit der Option, die Ausführung des Handlers selbst zu verbieten und eine benutzerdefinierte Nachbearbeitung. Filter sind leistungsfähiger, beispielsweise ermöglichen sie den Austausch von Anfrage- und Antwortobjekten, die über die Kette weitergegeben werden. Beachten Sie, dass ein Filter in web.xml, einem HandlerInterceptor im Anwendungskontext, konfiguriert wird.

Als grundlegende Richtlinie sind feinkörnige handlerbezogene Vorverarbeitungsaufgaben Kandidaten für HandlerInterceptor-Implementierungen, insbesondere ausgeklammerte allgemeine Handler-Codes und Berechtigungsprüfungen. Auf der anderen Seite ist ein Filter gut geeignet für den Inhalt von Anträgen und die Anzeige von Inhalten, wie Multipart-Formulare und GZIP-Komprimierung. Dies wird normalerweise angezeigt, wenn der Filter bestimmten Inhaltstypen (z. B. Bildern) oder allen Anforderungen zugeordnet werden muss.


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





interceptor