Filtres de Servlet dans Spring Boot

Introduction aux Filtres dans Spring Boot

Les filtres dans Spring Boot offrent un mécanisme pour intercepter et traiter les requêtes HTTP ainsi que les réponses associées. Ils sont couramment employés pour des tâches telles que la gestion des en-têtes CORS, la journalisation des requêtes, l'auhtentification des utiliasteurs ou la transformation des paramètres entrants.

Création d'un Filtre Personnalisé

Pour implémenter un filtre, il convient d'implémenter l'interface javax.servlet.Filter et de redéfinir la méthode doFilter(). Cette méthode contient la logique centrale du filtre.


package com.exemple.demo.filtre;

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 java.io.IOException;

import org.springframework.stereotype.Component;

@Component
public class FiltrePersonnalise implements Filter {

    @Override
    public void init(FilterConfig configFiltre) throws ServletException {
        // Initialisation optionnelle du filtre
        System.out.println("FiltrePersonnalise démarré.");
    }

    @Override
    public void doFilter(ServletRequest requete, ServletResponse reponse, FilterChain chaine) throws IOException, ServletException {
        // Pré-traitement de la requête
        System.out.println("Début du filtrage pour la requête.");
        
        // Passer au filtre ou à la ressource suivante
        chaine.doFilter(requete, reponse);
        
        // Post-traitement de la réponse
        System.out.println("Fin du filtrage pour la réponse.");
    }

    @Override
    public void destroy() {
        // Nettoyage optionnel lors de la destruction
        System.out.println("FiltrePersonnalise arrêté.");
    }
}

Enregistrement du Filtre

Spring Boot détecte automatiquement les composants annotés avec @Component, ce qui permet un enregistrement simple. Pour un contrôle accru sur l'ordre d'exécution ou les motifs d'URL, il est recomandé d'utiliser FilterRegistrationBean.


package com.exemple.demo.configuration;

import com.exemple.demo.filtre.FiltrePersonnalise;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ConfigurationFiltres {

    @Bean
    public FilterRegistrationBean<filtrepersonnalise> enregistrementFiltre() {
        FilterRegistrationBean<filtrepersonnalise> registrationBean = new FilterRegistrationBean<>();
        registrationBean.setFilter(new FiltrePersonnalise());
        registrationBean.addUrlPatterns("/service/*");
        registrationBean.setOrder(2);
        return registrationBean;
    }
}
</filtrepersonnalise></filtrepersonnalise>

Exemple de Filtre pour les Requêtes CORS

Un filtre peut être configuré pour ajouter les en-têtes nécessaires afin de gérer les requêtes Cross-Origin.


package com.exemple.demo.filtre;

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 java.io.IOException;

import org.springframework.stereotype.Component;

@Component
public class FiltreCORS implements Filter {

    @Override
    public void init(FilterConfig configFiltre) throws ServletException {
        // Aucune initialisation requise
    }

    @Override
    public void doFilter(ServletRequest requete, ServletResponse reponse, FilterChain chaine) throws IOException, ServletException {
        // Configuration des en-têtes CORS
        reponse.setHeader("Access-Control-Allow-Origin", "*");
        reponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
        reponse.setHeader("Access-Control-Allow-Headers", "Origin, Content-Type, Accept, Authorization");
        chaine.doFilter(requete, reponse);
    }

    @Override
    public void destroy() {
        // Aucune action nécessaire
    }
}

Étiquettes: Spring Boot Servlet Filter CORS Java

Publié le 21 juillet à 12h54