Filters (Spring Web): Перехватывают запросы и ответы на уровне сервлета. Используются для модификации запроса/ответа, аутентификации, авторизации, логирования до того, как запрос достигнет контроллера. Применяются к URL-шаблонам.
Interceptors (Spring MVC): Перехватывают запросы на уровне Spring MVC. Работают после Filter, но до того, как запрос обработается контроллером. Позволяют выполнять действия до (preHandle), после (postHandle) и после завершения обработки запроса (afterCompletion). Используются для манипулирования моделью, проверки прав доступа на уровне контроллера. Применяются к методам контроллера.
Listeners (Spring Context): Реагируют на события в контексте Spring. Позволяют выполнять действия при запуске или остановке контекста, получении определенного типа события. Могут использоваться для инициализации ресурсов, очистки данных или выполнения задач при изменении состояния приложения. Работают независимо от веб-запросов. Реализуют интерфейс ApplicationListener.
Вот табличное сравнение:
| Признак | Filters | Interceptors | Listeners |
|---|---|---|---|
| Уровень | Сервлет | Spring MVC | Spring Context |
| Когда работает | До и после сервлета | До, после контроллера и завершения | При возникновении события |
| Применяется к | URL-шаблоны | Методы контроллера | Типы событий |
| Назначение | Модификация запроса/ответа, аутентификация | Манипулирование моделью, авторизация на уровне контроллера | Реагирование на события контекста |
| Интерфейс | javax.servlet.Filter | org.springframework.web.servlet.HandlerInterceptor | org.springframework.context.ApplicationListener |