Middle
41
questionbank

В чем разница между Filters, Interceptors и Listeners в Spring?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Различия заключаются в назначении и этапе обработки запроса:

  • Filters (Фильтры):

    • Входят в спецификацию Servlet API.
    • Работают на уровне контейнера сервлетов (например, Tomcat).
    • Перехватывают запросы до отправки в Spring DispatcherServlet и ответы после его обработки.
    • Используются для общих задач, таких как аутентификация, авторизация, логирование, преобразование кодировки, сжатие данных.
    • Имеют доступ к объектам HttpServletRequest и HttpServletResponse.
    • Могут изменять или останавливать обработку запроса.
    • Конфигурируются в web.xml или с помощью аннотаций @WebFilter.
    java
  • Interceptors (Перехватчики):

    • Являются частью Spring Web MVC.
    • Работают на уровне DispatcherServlet.
    • Перехватывают запросы после того, как запросу был назначен контроллер, но до вызова метода контроллера, а также после вызова метода контроллера.
    • Используются для более специфичных задач, связанных с обработкой веб-запросов, таких как проверка пользовательской сессии, обработка исключений контроллера, добавление данных в модель перед рендерингом представления.
    • Имеют доступ к объектам HttpServletRequest, HttpServletResponse и Handler (метод контроллера).
    • Могут изменять ModelAndView или останавливать обработку запроса.
    • Конфигурируются через WebMvcConfigurer или XML-конфигурацию.
    java
  • Listeners (Слушатели):

    • Входят в спецификацию Servlet API.
    • Реагируют на события жизненного цикла веб-приложения, сессии или сервлет-контекста.
    • Не перехватывают непосредственно запросы.
    • Примеры событий: запуск/остановка приложения, создание/уничтожение сессии, добавление/удаление атрибутов в контексте или сессии.
    • Используются для инициализации/очистки ресурсов приложения, управления сессиями, логирования.
    • Конфигурируются в web.xml или с помощью аннотаций @WebListener.
    java

Сводная таблица:

ХарактеристикаFilterInterceptorListener
СпецификацияServlet APISpring Web MVCServlet API
Уровень работыКонтейнер сервлетов (до DispatcherServlet)DispatcherServlet (после назначения контроллеру)Жизненный цикл приложения/сессии/контекста
Что перехватываетЗапросы и ответы (до/после DS)Запросы (до/после контроллера)События жизненного цикла
Доступные объектыHttpServletRequest, HttpServletResponseHttpServletRequest, HttpServletResponse, Handler (Object)Зависит от типа слушателя (например, HttpSessionEvent)
НазначениеОбщие задачи (аутентификация, логирование, кодировка)Веб-специфичные задачи (сессия, исключения контроллера)Управление жизненным циклом, ресурсами
Метод конфигурацииweb.xml, @WebFilterWebMvcConfigurer, XMLweb.xml, @WebListener
Способ остановкиchain.doFilter() не вызываетсяpreHandle() возвращает falseНеapplicable к перехвату запросов