No se define ningún bean llamado 'springSecurityFilterChain'

1. El problema

Este artículo analiza un problema de configuración de Spring Security: el proceso de arranque de la aplicación genera la siguiente excepción:

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

2. La causa

La causa de esta excepción es sencilla: Spring Security busca un bean llamado springSecurityFilterChain (por defecto) y no puede encontrarlo. Este bean es requerido por el filtro de seguridad principal de Spring , el DelegatingFilterProxy , definido en web.xml :

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

Este es solo un proxy que delega toda su lógica al bean springSecurityFilterChain .

3. La solución

La razón más común por la que este bean falta en el contexto es que la configuración XML de seguridad no tieneelemento definido:

Si la configuración XML utiliza el espacio de nombres de seguridad, como en el ejemplo anterior, declarar un elemento simple garantizará que se cree el bean de filtro y que todo se inicie correctamente:

Otra posible razón es que la configuración de seguridad no se importa en absoluto al contexto general de la aplicación web.

Si el archivo de configuración XML de seguridad se llama springSecurityConfig.xml , asegúrese de que se importe el recurso :

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

O en XML:

Finalmente, el nombre predeterminado del bean de filtro se puede cambiar en web.xml , generalmente para usar un filtro existente con Spring Security:

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

4. Conclusión

Este artículo analiza un problema de Spring Security muy específico, el bean de cadena de filtro que falta, y muestra las soluciones a este problema común.