Ответ 1
Цитата из HandlerIntercepter
javadoc:
HandlerInterceptor
в основном похож на сервлетFilter
, но в в отличие от последнего, он просто позволяет настраивать предварительную обработку с помощью возможность запретить выполнение самого обработчика и пользовательский Постобработка. Фильтры более мощные, например, они позволяют обмен объектами запроса и ответа, которые передаются цепь. Обратите внимание, что фильтр настраивается вweb.xml
, aHandlerInterceptor
в контексте приложения.В качестве основного руководства выполняются мелкозернистые задачи предварительной обработки, связанные с обработчиком являются кандидатами на реализацию
HandlerInterceptor
, особенно проверенный общий код обработчика и проверки полномочий. На с другой стороны, aFilter
хорошо подходит для содержимого запроса и просмотра обработка содержимого, например, многочастные формы и сжатие GZIP. Эта обычно показывает, когда нужно сопоставить фильтр с определенным контентом типы (например, изображения) или ко всем запросам.
С учетом сказанного:
Итак, где разница между PostHandle() в Interceptor и doFilter() в фильтре?
postHandle
будет вызван после вызова метода обработчика, но перед визуализацией представления. Таким образом, вы можете добавить больше объектов модели в представление, но вы можете не изменить HttpServletResponse
, так как оно уже выполнено. doFilter
гораздо более универсален, чем postHandle
. Вы можете изменить запрос или ответ и передать его в цепочку или даже заблокировать обработку запроса.
Кроме того, в preHandle
и postHandle
у вас есть доступ к HandlerMethod
, который обработал запрос. Таким образом, вы можете добавить логику обработки перед отправкой на основе самого обработчика. Например, вы можете добавить логику для методов обработчика, которые содержат некоторые аннотации.
Какова наилучшая практика использования прецедентов?
Как сказал док, мелкозернистые задачи предварительной обработки, связанные с обработчиком, являются кандидатами для реализаций HandlerInterceptor
, особенно с учетом стандартного кода обработчика и проверки полномочий. С другой стороны, Filter
хорошо подходит для содержимого запроса и просматривает обработку содержимого, например, многочастные формы и сжатие GZIP. Это обычно показывает, когда нужно сопоставить фильтр с определенными типами контента (например, изображениями) или ко всем запросам.