Aucun bean nommé 'springSecurityFilterChain' n'est défini

1. Le problème

Cet article traite d'un problème de configuration de Spring Security - le processus de démarrage de l'application lançant l'exception suivante:

SEVERE: Exception starting filter springSecurityFilterChain org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined

2. La cause

La cause de cette exception est simple: Spring Security recherche un bean nommé springSecurityFilterChain (par défaut) et ne peut pas le trouver. Ce bean est requis par le filtre de sécurité Spring principal - DelegatingFilterProxy - défini dans le fichier web.xml :

 springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy   springSecurityFilterChain /* 

Il s'agit simplement d'un proxy qui délègue toute sa logique au bean springSecurityFilterChain .

3. La solution

La raison la plus courante pour laquelle ce bean est absent du contexte est que la configuration XML de sécurité n'a pasélément défini:

Si la configuration XML utilise l'espace de noms de sécurité - comme dans l'exemple ci-dessus, déclarer un élément simple garantira que le bean filtre est créé et que tout démarre correctement:

Une autre raison possible est que la configuration de sécurité n'est pas du tout importée dans le contexte global de l'application Web.

Si le fichier de configuration XML de sécurité est nommé springSecurityConfig.xml , assurez-vous que la ressource est importée :

@ImportResource({"classpath:springSecurityConfig.xml"})

Ou en XML:

Enfin, le nom par défaut du bean filtre peut être modifié dans le fichier web.xml - généralement pour utiliser un filtre existant avec Spring Security:

 springSecurityFilterChain  org.springframework.web.filter.DelegatingFilterProxy   targetBeanName customFilter  

4. Conclusion

Cet article traite d'un problème très spécifique de Spring Security - le bean de chaîne de filtre manquant - et montre les solutions à ce problème courant.