Maison > Java > javaDidacticiel > Introduction détaillée au filtre dans JavaWeb

Introduction détaillée au filtre dans JavaWeb

黄舟
Libérer: 2017-03-16 10:14:14
original
1508 Les gens l'ont consulté

Cet article présente principalement l'explication détaillée du filtrefiltre de JavaWeb et analyse les compétences d'utilisation du filtre de JavaWeb avec des exemples. Il est d'une grande valeur pratique et les amis dans le besoin peuvent s'y référer.

À l'origine, j'avais prévu cet article pour résumer JSP Comme JSP a beaucoup de contenu et que je veux courir la nuit pour perdre du poids, je vais aujourd'hui présenter le filtre et ses exemples d'utilisation. De cette façon, il reste encore du temps pour faire de l'exercice. Plus près de chez nous, le filtre a littéralement pour fonction de bloquer et de filtrer. Il peut être considéré comme l'assistant de blocage de JavaWeb.

1. Origine

Le client lance une requête, de sorte que le serveur ne peut pas répondre à toutes les requêtes. Le traitement de l'interception peut non seulement réduire la charge de travail. du serveur Il peut également protéger la sécurité des données. De même, lorsque le serveur répond au client, il faut parfois le filtrer, comme nos images communes en ajoutant des filigranes. Afin de faire face à ces problèmes, des filtres sont apparus. Parfois, la requête et la réponse ne sont pas seulement filtrées à un seul niveau, mais peuvent être filtrées à plusieurs niveaux, c'est pourquoi le concept de chaîne de filtres (FilterChain) est proposé

2 , utilisez

et familiarisez-vous avec sa fonction avant de l'utiliser. Le filtre passera par la chaîne de filtrage avant que la requête n'atteigne le

Servlet et avant que la réponse n'atteigne le navigateur. Un peu similaire au httpmodule dans asp.net L'utilisation de Filter implémente principalement javax.servlet.filterinterface. Affichez l'API et vous pouvez voir qu'il existe 3 méthodes.

1.public void init(FilterConfig filterConfig) renvoie un servletException

Appelé par le conteneur Web pour indiquer le filtre qui sera mis dans le service. Le conteneur de servlet appelle la méthode init une seule fois après l'instanciation du filtre. La méthode init doit se terminer avec succès avant de demander au filtre d'effectuer un travail de filtrage. Si la méthode init renvoie une ServletException ou ne renvoie pas dans le délai défini par le conteneur Web, le conteneur Web ne peut pas placer le filtre dans le service. Ceci est quelque peu similaire au

cycle de vie du servlet. Il n'est initialisé qu'une seule fois et destroy() est également exécuté une fois.

2. public void doFilter (demande ServletRequest, réponse ServletResponse, chaîne FilterChain) renvoie java.io.IOException, ServletException

À chaque fois en raison d'une paire à la fin de la chaîne Lorsqu'une requête client pour une ressource transmet une paire requête/réponse à travers la chaîne, le conteneur appelle la méthode doFilter du Filter. Le FilterChain passé dans cette méthode permet au Filter de transmettre la demande et la réponse à l'entité suivante de la chaîne.

Une implémentation typique de cette méthode suit le modèle suivant :

1. Vérifiez la requête


2. Transmettez éventuellement la requête avec une implémentation personnalisée

Objet enveloppé dans le contenu du filtre ou l'en-tête pour le filtrage des entrées

3. Encapsulez éventuellement l'objet de réponse avec une implémentation personnalisée dans le contenu du filtre pour le filtrage des sorties Ou dans l'en-tête


4. a) Vous pouvez soit utiliser l'objet FilterChain (chain.doFilter()) pour appeler l'entité suivante de la chaîne,


4 b) Il est également possible de bloquer le traitement des requêtes en ne le faisant pas. transmettre la paire requête/réponse à l'entité suivante dans la chaîne de filtres


5. Définissez les en-têtes sur la réponse directement après avoir appelé l'entité suivante dans la chaîne de filtres.

3. public void destroy()

Appelé par le conteneur Web pour indiquer le filtre à retirer du service. Cette méthode n'est appelée qu'une seule fois, après que tous les threads de la méthode doFilter du filtre se soient

sortis, ou après l'expiration du délai d'attente. Après avoir appelé cette méthode, le conteneur Web n'appellera pas la méthode doFilter sur cette instance de filtre. Cette méthode offre au filtre la possibilité de nettoyer toutes les ressources qu'il contient (telles que la mémoire, les descripteurs de fichiers et les threads) et garantit que tout état persistant est synchronisé avec l'état actuel du filtre dans mémoire.

3. Cas

Il existe de nombreux endroits pour utiliser les filtres, je ne donnerai donc pas d'exemples ici un par un. est dans le blog précédent Basé sur le projet HelloWorld, la fonction anti-sangsue est implémentée pour expérimenter l'utilisation de Filter.

1.Préparation

Dans le projet HelloWolrd ajoutez un dossier et mettez deux images dans le dossier, une err.png et une test.png Les deux images sont les suivantes

<.>

2. Créer un filtre

Il n'y a pas de nouveau package Filter ici. Créez le fichier Filter MyFilter directement dans le package com.test.cyw dans le blog précédent. pour gérer Filter Eh bien, c'est juste pour tester. Après la création, vous pouvez voir que MyFilter

hérite de Filter.


 public class MyFilter implements Filter
Copier après la connexion
3. Implémenter l'anti-hotlinking dans doFilter


package com.test.cyw;

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.*;

/*@WebFilter("/MyFilter")*/
public class MyFilter implements Filter {

  public MyFilter() {
    
  }

  public void destroy() {
    
  }

  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    
    HttpServletRequest req=(HttpServletRequest)request;
    HttpServletResponse res=(HttpServletResponse)response;
    String referer=req.getHeader("referer");//链接来源地址
    if(referer==null||!referer.contains(req.getServerName()))
    {
      req.getRequestDispatcher("/Images/err.png").forward(req, res);
      return;
    }
    chain.doFilter(req, res);
  }

  public void init(FilterConfig fConfig) throws ServletException {
    
  }
}
Copier après la connexion
4.Configuration du filtre

Ce qui précède crée simplement une classe qui implémente l'interface Filter. Comment informer Tomcat ? Ceci est similaire à Servlet et doit être configuré dans Web.

xml. C'est un peu la même chose que configurer une servlet.


  <filter>
   <filter-name>MyFilter</filter-name>
   <filter-class>com.test.cyw.MyFilter</filter-class>
 </filter>
 <filter-mapping>
   <filter-name>MyFilter</filter-name>
   <url-pattern>/Images/*</url-pattern>
 </filter-mapping>
Copier après la connexion
5. Test

Créez un nouveau fichier test.jsp et affichez l'img dans le jsp. Il peut être affiché normalement

.


 <%@ page language="java" contentType="text/html; charset=UTF-8"
  pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<img alt="防盗链" src="Images/test.png" width="400">
</body>
</html>
Copier après la connexion

Si vous saisissez directement l'adresse de test.png dans le navigateur, err.png

s'affichera

4. Problèmes rencontrés

Au début, en raison d'une erreur d'adresse, l'image affichée dans Google Chrome test.jsp était aussi l'image err.png, mais lorsque j'ai basculé et actualisé la page, cela n'a toujours pas changé. Parfois, le redémarrage de Tomca ne fonctionne pas, et cela fonctionne encore plusieurs fois. Lorsque cela ne fonctionne vraiment pas, je l'ai essayé avec IE, mais je ne m'attendais pas à ce que l'affichage soit correct. Il s'avère que Google Chrome l'a fait. un

cache , qui provoquait un affichage incorrect.

5. Résumé

Le filtre a de nombreuses utilisations, et il existe de nombreux exemples sur Internet Lorsque vous réalisez des projets, vous pouvez d'abord en mettre en œuvre. ceux couramment utilisés tels que les filigranes, etc. Lors de son utilisation, il vous suffit de configurer le XML pour résoudre le problème, ce qui est très pratique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal