Un filtre personnalisé dans la chaîne de filtres de sécurité Spring

1. Vue d'ensemble

Dans cet article rapide, nous nous concentrerons sur l'écriture d'un filtre personnalisé pour la chaîne de filtres Spring Security.

2. Création du filtre

Spring Security fournit un certain nombre de filtres par défaut, et la plupart du temps, cela suffit.

Mais bien sûr, il est parfois nécessaire d'implémenter de nouvelles fonctionnalités en créant un nouveau filtre à utiliser dans la chaîne.

Nous commencerons par implémenter org.springframework.web.filter.GenericFilterBean .

Le GenericFilterBean est un simple javax.servlet.Filter mise en œuvre de mise en œuvre qui est au courant du printemps.

Passons à l'implémentation - nous n'avons besoin que d'une seule méthode:

public class CustomFilter extends GenericFilterBean { @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response); } }

3. Utilisation du filtre dans Security Config

Nous sommes libres de choisir la configuration XML ou la configuration Java pour câbler le filtre dans la configuration Spring Security.

3.1. Configuration Java

Vous pouvez enregistrer le filtre en remplaçant par programme la méthode configure de WebSecurityConfigurerAdapter . Par exemple, cela fonctionne avec la méthode addFilterAfter sur une instance HttpSecurity :

@Configuration public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.addFilterAfter( new CustomFilter(), BasicAuthenticationFilter.class); } } 

Il existe plusieurs méthodes possibles:

  • addFilterBefore (filter, class) - ajoute un filtre avant la position de la classe de filtre spécifiée
  • addFilterAfter (filter, class) - ajoute un filtre après la position de la classe de filtre spécifiée
  • addFilterAt (filter, class) - ajoute un filtre à l'emplacement de la classe de filtre spécifiée
  • addFilter (filtre) - ajoute un filtre qui doit être une instance ou étendre l'un des filtres fournis par Spring Security

3.2. Configuration XML

Vous pouvez ajouter le filtre à la chaîne en utilisant la balise custom-filter et l'un de ces noms pour spécifier la position de votre filtre. Par exemple, il peut être signalé par l' attribut after :

Voici tous les attributs pour spécifier exactement un endroit où votre filtre dans la pile:

  • after - décrit le filtre immédiatement après lequel un filtre personnalisé sera placé dans la chaîne
  • before - définit le filtre avant lequel notre filtre doit être placé dans la chaîne
  • position - permet de remplacer un filtre standard à la position explicite par un filtre personnalisé

4. Conclusion

Dans cet article rapide, nous avons créé un filtre personnalisé et l'avons connecté à la chaîne de filtres Spring Security.

Comme toujours, tous les exemples de code sont disponibles dans l'exemple de projet Github.