Patron Filtre Intercepteur
Le modèle de filtre d'interception est utilisé pour effectuer un pré-traitement/post-traitement sur une requête ou une réponse d'une application. Définissez des filtres et appliquez-les sur la requête avant de la transmettre à l'application cible réelle. Les filtres peuvent effectuer une authentification/une autorisation/une journalisation, ou suivre la requête, puis transmettre la requête au gestionnaire correspondant. Voici les entités de ce modèle de conception.
- Filter- Le Filter effectue certaines tâches avant ou après que le gestionnaire de requêtes exécute la requête.
- Chaîne de filtres- La chaîne de filtres contient plusieurs filtres et les exécute sur la cible dans l'ordre défini.
- Cible- L'objet cible est le gestionnaire de la requête.
- Gestionnaire de filtres (Filter Manager)- Le gestionnaire de filtres gère les filtres et la chaîne de filtres.
- Client- Le client est l'objet qui envoie la requête à l'objet cible.
summary
intention
Utilisé pour prétraiter et post-traiter la requête via une série de filtres avant qu'elle n'atteigne la destination finale.
Problème principal résolu
- Résout le problème consistant à devoir effectuer des opérations courantes (telles que la journalisation, les contrôles de sécurité, la gestion des transactions, etc.) avant et après le traitement des requêtes dans les applications Web.
Cas d'utilisation
- Lorsqu'il est nécessaire d'insérer une logique supplémentaire dans le flux de traitement des requêtes, et que cette logique est indépendante de la logique métier.
Approche d'implémentation
- Chaîne de filtres: Une série de filtres s'exécute dans un ordre spécifique.
- Filtre: Composants qui effectuent un prétraitement et un post-traitement sur les requêtes et les réponses.
- Objet cibleLa destination finale du traitement de la requête.
Code clé
- Interface de filtre: Définit les méthodes que les filtres doivent implémenter, telles que
before()etafter()。 - Filtre concret: Implémente l'interface de filtre et contient une logique de traitement spécifique.
- Gestionnaire de filtres: Responsable du maintien de la chaîne de filtres et de l'ordre d'invocation des filtres.
Exemple d'application
- Serveur d'applications web: Par exemple, Tomcat utilise des filtres pour le traitement d'interception des requêtes, comme les contrôles de permissions, la journalisation, etc.
Avantages
- Séparation des préoccupations: Sépare les opérations communes de la logique métier, ce qui améliore la maintenabilité du code.
- Extensibilité: Les filtres peuvent être ajoutés, supprimés ou modifiés de manière flexible.
- Réutilisabilité: Les filtres peuvent être réutilisés dans différents traitements de requêtes.
Inconvénients
- Impact sur les performances: Si la chaîne de filtres est trop longue ou si les opérations effectuées par les filtres sont complexes, les performances peuvent être affectées.
Suggestions d'utilisation
- Lorsque vous devez insérer des opérations communes sans lien avec la logique métier dans le flux de traitement des requêtes, envisagez d'utiliser le modèle de filtre d'interception.
Notes
- Assurez-vous que l'ordre d'exécution des filtres correspond aux attentes afin d'éviter les erreurs de logique.
Principaux rôles impliqués
-
Interface de filtre:
- Définit les méthodes que les filtres doivent implémenter.
-
Filtre concret:
- Implémente l'interface de filtre, contenant une logique de traitement spécifique.
-
Gestionnaire de filtres:
- Responsable de maintenir la chaîne de filtres et d'invoquer les filtres.
-
Objet cible:
- La destination finale du traitement des requêtes, l'implémentation de la logique métier.
-
Client (facultatif):
- Le navigateur Web ou le client API qui envoie la requête.
Le modèle de conception Intercepting Filter permet de garder la logique métier claire et concentrée en insérant des opérations courantes dans le flux de traitement des requêtes.
Implémentation
Nous allons créerFilterChain、FilterManager、Target、ClientDivers objets agissant comme entités de représentation.AuthenticationFilteretDebugFilterReprésentent le filtre d'entité.
InterceptingFilterDemoUtilisation de la classeClientPour démontrer le modèle de conception Intercepting Filter.
Étape 1
Créer l'interface Filter.
Filter.java
Étape 2
Créer un filtre d'entité.
AuthenticationFilter.java
DebugFilter.java
Étape 3
Créer Target.
Target.java
Étape 4
Créer la chaîne de filtres.
FilterChain.java
Étape 5
Créer un gestionnaire de filtres.
FilterManager.java
Étape 6
Créer un client Client.
Client.java
Étape 7
UtilisationClientPour démontrer le patron de conception Intercepting Filter.
InterceptingFilterDemo.java
Étape 8
Exécutez le programme et affichez le résultat :
Authenticating request: HOME request log: HOME Executing request: HOMEautres extensions