От HandlerIntercepter«S Javadoc :
HandlerInterceptorв основном похож на сервлет Filter, но в отличие от последнего он просто позволяет настраивать предварительную обработку с возможностью запретить выполнение самого обработчика и настраиваемую постобработку. Фильтры более мощные, например, они позволяют обмениваться объектами запроса и ответа, которые передаются по цепочке. Обратите внимание , что фильтр получает настроен web.xml,
HandlerInterceptorв контексте приложения.
В качестве основного ориентира для HandlerInterceptorреализации могут быть использованы мелкозернистые задачи предварительной обработки, связанные с обработчиком , особенно с учетом кода общего обработчика и проверок авторизации. С другой стороны, a Filterхорошо подходит для обработки запросов и просмотра контента, например для составных форм и сжатия GZIP. Обычно это показывает, когда нужно сопоставить фильтр с определенными типами контента (например, изображениями) или со всеми запросами.
С учетом сказанного:
Так в чем же разница между Interceptor#postHandle()и
Filter#doFilter()?
postHandleбудет вызываться после вызова метода обработчика, но до рендеринга представления. Таким образом, вы можете добавить объекты модели к виду , но вы можете не изменить , HttpServletResponseтак как оно уже совершено.
doFilterнамного более универсален, чем postHandle. Вы можете изменить запрос или ответ и передать его в цепочку или даже заблокировать обработку запроса.
Кроме того , в preHandleи postHandleметодах, у вас есть доступ к HandlerMethodкоторый обработал запрос. Таким образом, вы можете добавить логику предварительной / постобработки на основе самого обработчика. Например, вы можете добавить логику для методов-обработчиков, которые имеют некоторые аннотации.
Какова наилучшая практика, в каких случаях ее следует использовать?
Как сказано в документе, детализированные задачи предварительной обработки, связанные с обработчиком, являются кандидатами для HandlerInterceptorреализации, особенно с учетом кода общего обработчика и проверок авторизации. С другой стороны, a Filterхорошо подходит для обработки запросов и просмотра контента, например для составных форм и сжатия GZIP. Обычно это показывает, когда нужно сопоставить фильтр с определенными типами контента (например, изображениями) или со всеми запросами.