Spring HandlerInterceptor против фильтров сервлетов - PullRequest
63 голосов
/ 03 ноября 2011

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

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

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

Ответы [ 3 ]

58 голосов
/ 04 ноября 2011

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

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

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

25 голосов
/ 04 ноября 2011

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

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

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

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

4 голосов
/ 03 ноября 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...