Depuis HandlerIntercepter
le javadoc de :
HandlerInterceptor
est 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
HandlerInterceptor
dans 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 HandlerInterceptor
implémentations, en particulier le code de gestionnaire commun et les vérifications d'autorisation. D'autre part, a Filter
est 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()
?
postHandle
sera 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 HttpServletResponse
car il est déjà validé.
doFilter
est 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 preHandle
et postHandle
, vous avez accès à HandlerMethod
qui 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 HandlerInterceptor
implémentations, en particulier le code de gestionnaire commun et les vérifications d'autorisation. D'autre part, a Filter
est 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.