Различия заключаются в назначении и этапе обработки запроса:
Filters (Фильтры):
HttpServletRequest и HttpServletResponse.web.xml или с помощью аннотаций @WebFilter.java
Interceptors (Перехватчики):
HttpServletRequest, HttpServletResponse и Handler (метод контроллера).ModelAndView или останавливать обработку запроса.WebMvcConfigurer или XML-конфигурацию.java
Listeners (Слушатели):
web.xml или с помощью аннотаций @WebListener.java
Сводная таблица:
| Характеристика | Filter | Interceptor | Listener |
|---|---|---|---|
| Спецификация | Servlet API | Spring Web MVC | Servlet API |
| Уровень работы | Контейнер сервлетов (до DispatcherServlet) | DispatcherServlet (после назначения контроллеру) | Жизненный цикл приложения/сессии/контекста |
| Что перехватывает | Запросы и ответы (до/после DS) | Запросы (до/после контроллера) | События жизненного цикла |
| Доступные объекты | HttpServletRequest, HttpServletResponse | HttpServletRequest, HttpServletResponse, Handler (Object) | Зависит от типа слушателя (например, HttpSessionEvent) |
| Назначение | Общие задачи (аутентификация, логирование, кодировка) | Веб-специфичные задачи (сессия, исключения контроллера) | Управление жизненным циклом, ресурсами |
| Метод конфигурации | web.xml, @WebFilter | WebMvcConfigurer, XML | web.xml, @WebListener |
| Способ остановки | chain.doFilter() не вызывается | preHandle() возвращает false | Неapplicable к перехвату запросов |