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
}
}