Depuis HandlerIntercepterle javadoc de :
HandlerInterceptorest fondamentalement similaire à un servlet Filter, mais contrairement à ce dernier, il autorise simplement un prétraitement personnalisé avec la possibilité d'interdire l'exécution du gestionnaire lui-même et un post-traitement personnalisé. Les filtres sont plus puissants, par exemple, ils permettent d'échanger les objets de requête et de réponse transmis le long de la chaîne. Notez qu'un filtre est configuré dans web.xml, a
HandlerInterceptordans le contexte de l'application.
En tant que directive de base, les tâches de prétraitement à granularité fine liées au gestionnaire sont des candidats pour les HandlerInterceptorimplémentations, en particulier le code de gestionnaire commun et les vérifications d'autorisation. D'autre part, a Filterest bien adapté pour la gestion du contenu des requêtes et des vues, comme les formulaires en plusieurs parties et la compression GZIP. Cela montre généralement quand on a besoin de mapper le filtre à certains types de contenu (par exemple des images), ou à toutes les demandes.
Cela étant dit:
Alors, où est la différence entre Interceptor#postHandle()et
Filter#doFilter()?
postHandlesera appelé après l'appel de la méthode du gestionnaire mais avant le rendu de la vue. Ainsi, vous pouvez ajouter plus d'objets de modèle à la vue, mais vous ne pouvez pas modifier le HttpServletResponsecar il est déjà validé.
doFilterest beaucoup plus polyvalent que le postHandle. Vous pouvez modifier la demande ou la réponse et la transmettre à la chaîne ou même bloquer le traitement de la demande.
De plus, dans les méthodes preHandleet postHandle, vous avez accès à HandlerMethodqui a traité la demande. Ainsi, vous pouvez ajouter une logique de pré / post-traitement basée sur le gestionnaire lui-même. Par exemple, vous pouvez ajouter une logique pour les méthodes de gestionnaire qui ont des annotations.
Quelle est la meilleure pratique dans quels cas d'utilisation doit-elle être utilisée?
Comme l'a dit le document, les tâches de prétraitement à granularité fine liées au gestionnaire sont des candidats pour les HandlerInterceptorimplémentations, en particulier le code de gestionnaire commun et les vérifications d'autorisation. D'autre part, a Filterest bien adapté pour la gestion du contenu des requêtes et des vues, comme les formulaires en plusieurs parties et la compression GZIP. Cela montre généralement quand on a besoin de mapper le filtre à certains types de contenu (par exemple des images), ou à toutes les demandes.