it-swarm.com.ru

Spring HandlerInterceptor против фильтров сервлетов

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

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

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

63
aces.

Интерфейс org.springframework.web.servlet.HanderInterceptorJavaDoc содержит два абзаца, в которых обсуждается этот вопрос:

HandlerInterceptor в основном похож на Servlet 2.3 Filter, но, в отличие от последнего, он просто позволяет настраивать предварительную обработку с возможностью запрета выполнения самого обработчика и настраиваемую последующую обработку. Фильтры более мощные, например, они позволяют обмениваться объектами запроса и ответа, которые передаются по цепочке. Обратите внимание, что фильтр настраивается в web.xml, HandlerInterceptor в контексте приложения.

В качестве основного руководства, детализированные задачи предварительной обработки, связанные с обработчиком, являются кандидатами для реализаций HandlerInterceptor, особенно с учетом общего кода обработчика и проверок авторизации. С другой стороны, фильтр хорошо подходит для обработки содержимого запроса и просмотра содержимого, например многокомпонентных форм и сжатия GZIP. Обычно это показывает, когда нужно сопоставить фильтр с определенными типами контента (например, изображениями) или со всеми запросами.

58
Ralph

Перехватчики Spring Handler позволяют подключаться к большему количеству частей жизненного цикла запроса и получать доступ к дополнительной информации в процессе. Они часто более тесно связаны с циклом запроса/ответа, чем с фильтрами.

Фильтры больше подходят для обработки вашего запроса/ответа как системы черного ящика. Они будут работать независимо от того, как реализован сервлет.

Если вы используете Spring MVC, нет особых причин писать новую логику в качестве фильтра сервлета. Все, что могут делать фильтры, перехватчики могут делать проще и элегантнее.

Помните также, что фильтры сервлетов существуют намного дольше, чем перехватчики.

25
skaffman

С перехватчиком Spring у вас есть доступ к обработчику, который может быть полезен. Кроме того, с помощью перехватчика Spring у вас есть доступ к логике выполнения до визуализации представления и после визуализации представления.

4
smp7d