No Bean Named ‘springSecurityFilterChain’ er definert
1. Problemet
Denne artikkelen diskuterer et Spring Security-konfigurasjonsproblem - applikasjonsoppstartprosessen som kaster følgende unntak:
ALVOR: Unntak som starter filterfjærSecurityFilterChain org.springframework.beans.factory.NoSuchBeanDefinitionException: Ingen bønne med navnet 'springSecurityFilterChain' er definert
2. Årsaken
Årsaken til dette unntaket er grei - Spring Security ser etter en bønne som heter springSecurityFilterChain (som standard), og finner den ikke. Denne bønnen kreves av hovedmannen Vårens sikkerhetsfilter - den DelegeringFilterProxy - definert i web.xml:
springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy springSecurityFilterChain / *
Dette er bare en fullmektig som delegerer all sin logikk til springSecurityFilterChain bønne.
3. Løsningen
Den vanligste årsaken til at denne bønnen mangler i sammenhengen, er at XML-sikkerhetskonfigurasjonen har Nei element definert:
Hvis XML-konfigurasjonen bruker sikkerhetsnavnområdet - som eksemplet ovenfor, så erklærer du et enkelt element vil sikre at filterbønnen blir opprettet og at alt starter riktig:
En annen mulig årsak er at sikkerhetskonfigurasjonen er ikke importert i det hele tatt inn i den generelle konteksten til webapplikasjonen.
Hvis sikkerhets-XML-konfigurasjonsfilen er navngitt springSecurityConfig.xml, forsikre ressursen er importert:
@ImportResource ({"classpath: springSecurityConfig.xml"})
Eller i XML:
Til slutt kan standardnavnet på filterbønnen endres i web.xml - vanligvis for å bruke et eksisterende filter med Spring Security:
springSecurityFilterChain org.springframework.web.filter.DelegatingFilterProxy targetBeanName customFilter
4. Konklusjon
Denne artikkelen diskuterer et veldig spesifikt Spring Security-problem - den manglende filterkjedebønnen - og viser løsningene på dette vanlige problemet.