Подтвердить что ты не робот

Spring HandlerInterceptor vs Servlet Filters

HandlerInterceptor в Spring теперь можно настроить для вызова только на определенных URL-адресах с помощью <mvc:interceptors>.

Сервлет-фильтры могут выполнять те же функции (ведение журнала, безопасность и т.д.). Итак, какой из них следует использовать?

Я думаю, что с помощью Interceptors можно использовать объект ModelAndView для работы с моделями, чтобы он имел больше преимуществ. Может ли кто-нибудь вычеркнуть сценарии, в которых фильтры или перехватчики имеют преимущества перед другими?

4b9b3361

Ответ 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 у вас есть доступ к логике выполнения перед визуализацией представления и после визуализации представления.