Spring安全身份验证管理器没有提供程序

Spring安全身份验证管理器没有提供程序,spring,authentication,spring-security,provider,Spring,Authentication,Spring Security,Provider,我正在尝试使用Spring security设置一个简单的项目,以启用Username/pwd登录 在指向UsernamePasswordAuthenticationFilter中的某个断点后,我注意到getAuthenticationManager有0个提供程序 this.getAuthenticationManager() 但是,我确实在security-context.xml中添加了这一点 <authentication-manager> <authen

我正在尝试使用Spring security设置一个简单的项目,以启用Username/pwd登录

在指向UsernamePasswordAuthenticationFilter中的某个断点后,我注意到getAuthenticationManager有0个提供程序

this.getAuthenticationManager()
但是,我确实在security-context.xml中添加了这一点

<authentication-manager>
        <authentication-provider user-service-ref="userDetailsService">
            <password-encoder ref="passwordEncoder"/>
        </authentication-provider>
    </authentication-manager>

看起来authenticationManager确实正确地自动连接,但由于某些原因,身份验证提供程序没有被注入


我忘记在什么地方启用了什么吗?

默认情况下,SpringSecurity使用
org.springframework.security.authentication.ProviderManager
,除非设置了父级,否则它最初应该至少配置一个提供程序。否则,您将在初始化阶段获得
IllegalArgumentException
。因此,您肯定应该能够在从筛选器返回的身份验证管理器中或在其父级中找到身份验证提供程序(当然,只要没有故意删除提供程序的有害代码)。

从Spring security 3升级到版本4时,我们正面临这个问题。 我们有一个
AuthenticationManager
定义如下

<authentication-manager alias="authenticationManager">
    <authentication-provider ref="rememberMeAuthenticationProvider"/>
    <authentication-provider ref="customAuthenticationProvider"/>
</authentication-manager>

当未指定id时,Spring在覆盖全局注册的
authenticationManager
的bean解析过程中将id设置为“org.springframework.security.authenticationManager”。这似乎搞乱了指定的
提供程序

我看错了提供程序。基本提供程序为空,但“父级”中有一个
<authentication-manager id="authenticationManager">
    ...
</authentication-manager>