Від HandlerIntercepter
's javadoc :
HandlerInterceptor
в основному схожий на сервлет Filter
, але на відміну від останнього він просто дозволяє користувальницькій попередній обробці з можливістю заборонити виконання самого обробника та користувацьку післяобробку. Фільтри є більш потужними, наприклад, вони дозволяють обмінюватися запитами та об'єктами відповідей, які передаються по ланцюгу. Зауважте, що фільтр налаштовується в web.xml
, a
HandlerInterceptor
в контексті програми.
В якості основної настанови завдання попередньої обробки, пов'язані з дрібнозернистими обробниками, є кандидатами на HandlerInterceptor
реалізацію, особливо розроблений загальний код обробника та перевірки авторизації. З іншого боку, A Filter
добре підходить для запиту контенту та перегляду вмісту, як багаточастинні форми та стиснення GZIP. Зазвичай це показує, коли потрібно зіставити фільтр на певні типи вмісту (наприклад, зображення) або на всі запити.
З цим сказано:
То де різниця між Interceptor#postHandle()
і
Filter#doFilter()
?
postHandle
буде викликано після виклику методу обробника, але до того, як буде показано представлення. Отже, ви можете додати до перегляду більше об'єктів моделі, але ви не можете змінити, HttpServletResponse
оскільки це вже зроблено.
doFilter
набагато більш універсальний, ніж postHandle
. Ви можете змінити запит або відповідь і передати його в ланцюг або навіть заблокувати обробку запиту.
Крім того, в preHandle
і postHandle
методах ви маєте доступ до того, HandlerMethod
що обробляв запит. Отже, ви можете додати логіку попередньої та після обробки на основі самого обробника. Наприклад, ви можете додати логіку до методів обробника, які мають деякі примітки.
Яка найкраща практика, у яких випадках використання її слід використовувати?
Як сказав док, завдання попередньої обробки, пов'язані з дрібнозернистими обробниками, є кандидатами на HandlerInterceptor
реалізацію, особливо розроблений загальний код обробника та перевірки авторизації. З іншого боку, A Filter
добре підходить для запиту контенту та перегляду вмісту, як багаточастинні форми та стиснення GZIP. Зазвичай це показує, коли потрібно зіставити фільтр на певні типи вмісту (наприклад, зображення) або на всі запити.