От 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. Обычно это показывает, когда нужно сопоставить фильтр с определенными типами контента (например, изображениями) или со всеми запросами.