Filtres Spring HandlerInterceptor vs Servlet

HandlerInterceptor s dans Spring peut maintenant être configuré pour être appelé uniquement sur certaines URL en utilisant .

Les filtres de servlet peuvent atteindre les mêmes fonctionnalités (journalisation, sécurité, etc.). Alors, lequel doit être utilisé?

Je pense qu’avec les intercepteurs, on peut utiliser l’object ModelAndView pour travailler avec des modèles, ce qui présente plus d’avantages. Quelqu’un peut-il dessiner des scénarios où les filtres ou les intercepteurs ont des avantages sur l’autre?

L’interface org.springframework.web.servlet.HanderInterceptor JavaDoc possède deux paragraphes qui traitent de cette question:

HandlerInterceptor est fondamentalement similaire à un filtre Servlet 2.3, mais contrairement à ce dernier, il permet 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 objects de requête et de réponse transmis par la chaîne. Notez qu’un filtre est configuré dans web.xml, un HandlerInterceptor dans le contexte de l’application.

En guise de directive de base, les tâches de prétraitement affinées liées au gestionnaire sont des candidats potentiels pour les implémentations de HandlerInterceptor, en particulier les vérifications du code de gestionnaire commun et des permissions. D’un autre côté, un filtre est bien adapté au contenu des requêtes et à la gestion du contenu, comme les formulaires en plusieurs parties et la compression GZIP. Cela montre généralement quand il faut associer le filtre à certains types de contenu (par exemple, des images) ou à toutes les demandes.

Les intercepteurs Spring Handler vous permettent d’accéder à plus de parties du cycle de vie de la requête et d’accéder à plus d’informations dans le processus. Ils sont souvent plus intimement liés au cycle de demande / réponse que les filtres.

Les filtres sont plus adaptés lors du traitement de votre demande / réponse en tant que système de boîte noire. Ils fonctionneront indépendamment de la manière dont le servlet est implémenté.

Si vous utilisez Spring MVC, il y a peu de raisons d’écrire une nouvelle logique en tant que filtre de servlet. Tout ce que les filtres peuvent faire, les intercepteurs peuvent faire plus facilement et plus élégamment.

Rappelez-vous également que les filtres de servlets sont restés longtemps plus longtemps que les intercepteurs.

Avec un intercepteur Spring, vous avez access au Handler qui peut être utile. De plus, avec un intercepteur Spring, vous avez access à la logique d’exécution avant le rendu de la vue et après le rendu de la vue.