web-dev-qa-db-fra.com

Obtention de l'erreur org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean nommé 'springSecurityFilterChain' n'est défini

J'exécute NTLM à l'aide de Spring Security, j'obtiens l'erreur suivante

org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean nommé 'springSecurityFilterChain' n'est défini

Comment puis-je résoudre cette erreur?

J'ai les éléments suivants définis dans web.xml

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Mise à jour 1

J'ai résolu cette erreur, maintenant je reçois

org.springframework.beans.factory.NoSuchBeanDefinitionException: aucun bean nommé 'filterSecurityInterceptor' n'est défini

et j'ai ce qui suit

<bean id="springSecurityFilterChain" class="org.acegisecurity.util.FilterChainProxy">
    <property name="filterInvocationDefinitionSource">
    <value>
    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
    PATTERN_TYPE_Apache_ANT
    /**=httpSessionContextIntegrationFilter, exceptionTranslationFilter, ntlmFilter, filterSecurityInterceptor
    </value>
    </property>
    </bean>`

J'ai changé mon applicationContext.xml comme suit parce que, comme @Sean Patrick Floyd a mentionné certains éléments étaient vieux et morts et enterrés. Cependant, j'ai maintenant d'autres erreurs qui doivent être corrigées :-)

Merci

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:security="http://www.springframework.org/schema/security"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.2.xsd">
  <!--<authentication-manager alias="_authenticationManager"></authentication-manager>-->
  <security:authentication-provider>
    <security:user-service>
      <security:user name="testuser" password="PASSWORD" authorities="ROLE_USER, ROLE_ADMIN"/>
      <security:user name="administrator" password="PASSWORD" authorities="ROLE_USER,ROLE_ADMIN"/>
    </security:user-service>
  </security:authentication-provider>
  <bean id="userDetailsAuthenticationProvider"
        class="com.icesoft.icefaces.security.UserDetailsAuthenticationProvider">
    <security:custom-authentication-provider/>
  </bean>
  <bean id="ntlmEntryPoint"
        class="org.springframework.security.ui.ntlm.NtlmProcessingFilterEntryPoint">
    <property name="authenticationFailureUrl" value="/accessDenied.jspx"/>
  </bean>
  <bean id="ntlmFilter" class="org.springframework.security.ui.ntlm.NtlmProcessingFilter">
    <security:custom-filter position="NTLM_FILTER"/>
    <property name="stripDomain" value="true"/>
    <property name="defaultDomain" value="domain"/>
    <property name="netbiosWINS" value="domain"/>
    <property name="authenticationManager" ref="_authenticationManager"/>
  </bean>
  <bean id="exceptionTranslationFilter"
        class="org.springframework.security.ui.ExceptionTranslationFilter">
    <property name="authenticationEntryPoint" ref="ntlmEntryPoint"/>
  </bean>
  <security:http access-decision-manager-ref="accessDecisionManager"
                 entry-point-ref="ntlmEntryPoint">
    <security:intercept-url pattern="/accessDenied.jspx" filters="none"/>
    <security:intercept-url pattern="/**" access="ROLE_USER"/>
  </security:http>
  <bean id="accessDecisionManager" class="org.springframework.security.vote.UnanimousBased">
    <property name="allowIfAllAbstainDecisions" value="false"/>
    <property name="decisionVoters">
      <list>
        <bean id="roleVoter" class="org.springframework.security.vote.RoleVoter"/>
      </list>
    </property>
  </bean>
</beans>
34
Jåcob

À partir des documents DelegatingFilterProxy :

Notez que le filtre est en fait un DelegatingFilterProxy, et non la classe qui implémentera réellement la logique du filtre. La fonction DelegatingFilterProxy consiste à déléguer les méthodes du filtre à un bean obtenu à partir du contexte de l'application Spring . Cela permet au bean de bénéficier de la prise en charge du cycle de vie du contexte de l'application Web Spring et de la flexibilité de configuration. Le bean doit implémenter javax.servlet.Filter et il doit avoir le même nom que celui de l'élément filter-name . Lisez le Javadoc pour DelegatingFilterProxy pour plus d'informations

Vous devez définir un bean nommé springSecurityFilterChain qui implémente javax.servlet.Filter Dans votre contexte d'application.

De Prise en main de la configuration de l'espace de noms de sécurité :

Si vous connaissez les versions pré-espace de noms du framework, vous pouvez probablement déjà deviner à peu près ce qui se passe ici. L'élément <http> Est responsable de la création d'un FilterChainProxy et des beans de filtrage qu'il utilise . Les problèmes courants comme le mauvais ordre des filtres ne sont plus un problème car les positions des filtres sont prédéfinies.

Il vous faut donc au moins ne configuration minimale <http>

41
Sean Patrick Floyd

Sean Patrick Floyd a absolument raison, mais je pense qu'il vaut la peine de mentionner une solution, qui m'a pris beaucoup de temps.

Vous ajoutez simplement l'annotation @ImportResource.

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"org.company"})
@ImportResource({"classpath:security.xml"})
public class CompanyWebMvcConfiguration extends WebMvcConfigurerAdapter {
}

security.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
             xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
    http://www.springframework.org/schema/security
    http://www.springframework.org/schema/security/spring-security-3.1.xsd">


    <http use-expressions="true">
        <access-denied-handler error-page="/error"/>
    </http>
6
Christian Nilsson

Dans la configuration Java, vous pouvez utiliser les annotations suivantes:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {

}

Cela importera le org.springframework.security.config.annotation.web.configuration.WebSecurityConfiguration classe de configuration qui définit le bean springSecurityFilterChain.

3
Samuel

Veuillez fournir un fichier de sécurité de printemps avec une configuration minimale

http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/securityhttp: // www .springframework.org/schema/security/spring-security-3.0.3.xsd ">

<http auto-config='true'>
    <intercept-url pattern="/**" access="ROLE_USER" />
</http>
1
Victor