Spring HandlerInterceptor vs Servlet Filters
HandlerInterceptor в Spring теперь можно настроить для вызова только на определенных URL-адресах с помощью <mvc:interceptors>
.
Сервлет-фильтры могут выполнять те же функции (ведение журнала, безопасность и т.д.). Итак, какой из них следует использовать?
Я думаю, что с помощью Interceptors можно использовать объект ModelAndView
для работы с моделями, чтобы он имел больше преимуществ. Может ли кто-нибудь вычеркнуть сценарии, в которых фильтры или перехватчики имеют преимущества перед другими?
Ответы
Ответ 1
Интерфейс org.springframework.web.servlet.HanderInterceptor
Interface JavaDoc имеет два абзаца, которые обсуждают этот вопрос:
HandlerInterceptor в основном похож на фильтр Servlet 2.3, но в отличие от последнего, он просто позволяет настраивать предварительную обработку с помощью возможность запретить выполнение самого обработчика и пользовательская пост-обработка. Фильтры более мощные, например, они позволяют обменивать объекты запроса и ответа, которые передаются вниз по цепи. Обратите внимание, что фильтр настраивается в web.xml, a HandlerInterceptor в контексте приложения.
В качестве основного руководства выполняются мелкозернистые задачи предварительной обработки, связанные с обработчиком являются кандидатами на реализацию HandlerInterceptor, особенно проверенный общий код обработчика и проверки полномочий. На с другой стороны, фильтр хорошо подходит для содержимого запроса и просмотра обработка содержимого, например, многочастные формы и сжатие GZIP. Эта обычно показывает, когда нужно сопоставить фильтр с определенным контентом типы (например, изображения) или ко всем запросам.
Ответ 2
Spring Перехватчики обработчиков позволяют вам подключаться к другим частям жизненного цикла запроса и получать доступ к дополнительной информации в этом процессе. Они часто более тесно связаны с циклом запроса/ответа, чем фильтры.
Фильтры более подходят при обработке вашего запроса/ответа в виде системы черного ящика. Они будут работать независимо от того, как выполняется сервлет.
Если вы используете Spring MVC, есть небольшая причина для написания новой логики в качестве фильтра сервлета. Все фильтры могут делать, перехватчики могут делать более легко и элегантно.
Помните, что фильтры сервлетов были намного длиннее, чем перехватчики.
Ответ 3
С помощью перехватчика Spring у вас есть доступ к Handler, который может быть полезен. Кроме того, с помощью перехватчика Spring у вас есть доступ к логике выполнения перед визуализацией представления и после визуализации представления.