Від 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. Зазвичай це показує, коли потрібно зіставити фільтр на певні типи вмісту (наприклад, зображення) або на всі запити.