Principe du filtre Java, intercepteur, filtre, différences d'écoute et ordre d'exécution

Cet article cite le contenu du travail de l'auteur ( Huakai Pinellia ). Je pense qu'il est bien écrit. Je vais l'enregistrer pour une révision facile et l'empêcher de disparaître. Pour plus de détails, veuillez vérifier l'auteur original.
Parallèlement, nous avons également rassemblé d'autres articles de blog faciles à comprendre. Si vous êtes intéressé, vous pouvez y jeter un œil pour favoriser la compréhension des
intercepteurs, des filtres et des séquences d'exécution des auditeurs (filtres personnels interceptés)
https://javaforall .cn/128546.html
C'est l'arrière de la petite salle de classe de la Cultivation Academy, toutes les phrases partagées viennent d'ici

[Introduction de base] [Analyse des connaissances] [Foire aux questions] [Solutions] [Pratique de codage] [Expansion de la réflexion] [Plus de discussions] [Références]

Analyse approfondie des connaissances/compétences back-end sous 8 aspects. Ce que partage cet article est :

[Quelles sont respectivement les fonctions des intercepteurs, des filtres et des auditeurs ?

Bonjour. Je suis un étudiant de la 10e classe de la branche de Zhengzhou de l'IT Cultivation Academy, un programmeur JAVA honnête, pur et bienveillant.

Aujourd'hui, j'aimerais partager avec vous, sur le site officiel de la Cultivation Academy, la tâche JAVA 5, des points de connaissances pour élargir votre réflexion : quelles sont les fonctions des intercepteurs, des filtres et des auditeurs ?

1. Introduction générale

1.Filtre

Dépend du conteneur de servlet. Bien que l'implémentation puisse filtrer presque toutes les requêtes en fonction des rappels de fonctions, son inconvénient est qu'une seule instance de filtre est appelée lors de l'initialisation du conteneur. Le but de l'utilisation d'un filtre est d'effectuer des opérations de filtrage telles que la modification des codes de caractères dans le filtre pour obtenir les données souhaitées. Modifiez certains paramètres de la requête du servlet http dans le filtre. Cela inclut le filtrage des textes vulgaires, des textes dangereux, etc.

2.Intercepteur

Dépend du framework Web, dans SpringMVC cela dépend du framework SpringMVC. La réflexion basée sur Java dans l'implémentation est une opération de programmation orientée tranche (AOP). L'intercepteur est basé sur l'appel du framework Web, il peut donc utiliser le multiplexage dépendant de Spring pour effectuer certaines opérations commerciales. De plus, les instances d'intercepteur peuvent être appelées plusieurs fois au cours du cycle de vie du contrôleur. Cependant, son inconvénient est qu’il ne peut bloquer que les requêtes du contrôleur, mais pas les autres requêtes telles que l’accès direct aux ressources statiques.

3.Auditeur

Un écouteur Web est une classe spéciale de servlets qui aide les développeurs à surveiller des événements spécifiques sur le Web. Le programme côté serveur qui implémente l'interface javax.servlet.servletcontextlistener est démarré au démarrage de l'application Web APP, n'est initialisé qu'une seule fois et est détruit lorsque l'application Web APP est arrêtée. Le rôle principal est de détecter l'initialisation et les modifications des propriétés, telles que les requêtes, les sessions et les applications.

2. Analyse des connaissances

1. Utilisation d'intercepteurs

Utilisé dans le projet : configuré dans la classe springMVC.xml qui implémente l'interface

Le filtre implémente HandlerInterceptor ou WebRequestInterceptor et utilise les méthodes prehandle(…), postHandle) et afterCompletion) appropriées.

(1) La méthode preHandle est appelée avant de traiter la requête. Par conséquent, vous pouvez utiliser cette méthode pour effectuer certaines opérations de pré-initialisation, prétraiter la demande en cours ou utiliser cette méthode pour émettre des jugements afin de déterminer s'il convient de poursuivre la demande. La valeur de retour de cette méthode est de type booléen. Le retour de false indique que la requête sera terminée et que l'Interceptor et le Controller suivants ne s'exécuteront plus. Si la valeur de retour est vraie, continuez à appeler la méthode de pré-handle de l'intercepteur suivante ; s'il s'agit du dernier intercepteur, appelez la méthode du contrôleur de la requête en cours :

)2) La méthode postHandle, comme son nom l'indique, est exécutée après le traitement de la requête en cours, c'est-à-dire après avoir appelé la méthode du contrôleur, mais avant que le servlet répartiteur ne renvoie la vue pour le rendu, donc cette méthode

)3) Une fois la requête entière terminée, c'est-à-dire après que DispatcherServlet ait rendu la vue correspondante, exécutez la méthode afterCompletion. L'objectif principal de cette méthode est d'organiser les ressources.

2. Utilisez des filtres

Utilisé dans le projet : Ecrire la configuration dans la classe web.xml qui implémente l'interface

Le filtre n'a besoin que d'implémenter javax.servlet.filter et de remplacer la méthode dofilter(...), init), destroy)

Implémentez la méthode doFilter pour terminer le filtrage des demandes ou des réponses

Implémentez la méthode init et lisez les paramètres d'initialisation du filtre

destroy (), effectuer certaines opérations lors de la destruction du filtre

3. Utilisez un auditeur

Utilisé dans le projet : configuré dans la classe springMVC.xml qui implémente l'interface

Il existe principalement quatre ou huit types d'interfaces d'écoute, qui peuvent surveiller la génération, la destruction et les modifications d'attributs des domaines de requête, des domaines de session et des domaines d'application.

Créez un objet d'écoute :

)1) ServletContext : surveille principalement la création de servletContext et doit implémenter l'interface ServeltContextListener ;

)2) ServletRequest : surveille principalement la création de requêtes et doit implémenter l'interface ServletRequestListener ;

)3) Session http : il doit principalement surveiller la création de la session et implémenter l'interface d'écoute de session http.

Recevoir les modifications de propriété :

)1) ServletContext : il doit principalement intercepter la modification, l'ajout et la suppression des attributs servletContext et implémenter l'interface ServeltContextAttrbuteListener ;

)2) requête de servlet : surveille principalement
la modification, l'ajout et la suppression de l'attribut request t et doit implémenter l'interface ServletRequestAttrbuteListener ; (3) HttpSession : surveille principalement la modification, l'ajout et la suppression de l'attribut de session et nécessite pour implémenter l'interface HttpSessionAttrbuteListener.

Surveillance de l'activation et de la passivation de la session : httpSessionActivationListener surveille principalement l'activation et la passivation de la session.

Surveillez la liaison entre la session et l'objet : httpSessionBindingListener surveille la liaison entre la session et l'objet.

3. Problèmes courants et solutions

Quelle est la différence entre les intercepteurs, les filtres et les auditeurs ?

1. Du point de vue de la préoccupation : le filtre intercepte les requêtes Web dans le cadre du filtre et apporte les modifications correspondantes à certaines informations ; l'auditeur agit sur la surveillance des paramètres au niveau du système et n'apporte généralement aucune modification.

2. En termes de prise en charge : les intercepteurs nécessitent la prise en charge de Spring ; les filtres et les écouteurs nécessitent la prise en charge des servlets.

3. Différents scénarios d'application

(1) Intercepteur : intercepter les non-connexions, les journaux d'audit, etc. ;

(2) Filtre : définissez le codage des caractères, le contrôle d'accès aux autorisations au niveau de l'URL, filtrez les mots sensibles, compressez les informations de réponse, etc. ;

(3) Auditeur : compte le nombre de personnes en ligne et efface les sessions expirées.

4. Pratique du codage

Voir la vidéo pour plus de détails.

5. Pensée élargie

1. Ordre d'exécution des intercepteurs, filtres et écouteurs

Écouteurs > Filtres > Intercepteurs > exécution de servlet > Intercepteurs > Filtres > Écouteurs

2. Ordre d'exécution de plusieurs intercepteurs (deux)

(1) Lorsque les deux intercepteurs implémentent des opérations de libération, l'ordre est preHandle 1, preHandle 2, postHandle 2, postHandle 1, afterCompletion 2, afterCompletion 1 ;

(2) Lorsque le premier intercepteur preHandle renvoie false, c'est-à-dire lorsqu'il est intercepté, le deuxième intercepteur n'est pas exécuté du tout et le premier intercepteur n'exécute que la partie preHandle ;

(3) Lorsque le premier intercepteur preHandle renvoie vrai, le deuxième intercepteur preHandle renvoie faux, l'ordre est preHandle 1, preHandle 2, afterCompletion 1.

3. Ordre d'exécution de plusieurs filtres

Le serveur Web détermine quel filtre appeler en premier en fonction de l'ordre d'enregistrement des filtres dans web.xml. Lorsque la méthode doFilter du premier filtre est appelée, le serveur Web crée un objet FilterChain représentant la chaîne de filtres et le transmet à la méthode. . Dans la méthode doFilter , si le développeur appelle la méthode doFilter de l'objet FilterChain, le serveur web vérifiera s'il existe un autre filtre dans l'objet FilterChain. Si tel est le cas, le deuxième filtre sera appelé. Dans le cas contraire, la ressource cible sera appelé.

4. Ordre d'exécution de plusieurs auditeurs

S'il y a plusieurs écouteurs dans un webServlet, les écouteurs de servlet sont chargés et enregistrés dans l'ordre dans lequel ils sont chargés.

7. Plus de discussions

1. Comment utiliser des annotations personnalisées pour implémenter des intercepteurs ?

Vous devez d'abord définir une annotation personnalisée

@Target(ElementType.METHOD )

@Rétention(RetentionPolicy.RUNTIME)

public @interface AccessRequired {

}

ElementType.METHOD signifie ici qu'il est valide pour la méthode

RetentionPolicy.RUNTIME

Généralement, si vous avez besoin d'obtenir dynamiquement des informations d'annotation au moment de l'exécution, vous ne pouvez utiliser que les annotations RUNTIME.

Ensuite, lors de l'écriture de votre propre intercepteur, vous devez également le configurer dans le fichier web.xml

Enfin, marquez la méthode qui doit être interceptée avec une annotation personnalisée pour indiquer que cette méthode doit être interceptée.

2. Si vous n'êtes pas connecté ou si vous n'êtes pas VIP, pouvez-vous essayer de résoudre le problème en 10 minutes ?

Divisez la vidéo en segments. Les dix premières minutes constituent une demande, puis la demande est faite à nouveau et la demande suivante est interceptée.

3. La différence entre les intercepteurs et les filtres :

(1) L'intercepteur est basé sur le mécanisme de réflexion de Java, tandis que le filtre est basé sur des rappels de fonctions.

(2) L'intercepteur ne dépend pas du conteneur de servlet, mais le filtre dépend du conteneur de servlet.

(3) Les intercepteurs ne peuvent fonctionner que sur les demandes d'action, tandis que les filtres peuvent fonctionner sur presque toutes les demandes.

(4) Les intercepteurs peuvent accéder aux objets dans le contexte d'action et la pile de valeurs, mais pas les filtres.

(5) Dans le cycle de vie de l'action, l'intercepteur peut être appelé plusieurs fois, mais le filtre ne peut être appelé qu'une seule fois lors de l'initialisation du conteneur.

Je suppose que tu aimes

Origine blog.csdn.net/m0_46364149/article/details/127103963
conseillé
Classement