【问题标题】:UserDetailsService bean missing since Spring Security migration from XML to JavaConfig自 Spring Security 从 XML 迁移到 JavaConfig 以来缺少 UserDetailsS​​ervice bean
【发布时间】:2014-02-20 19:19:19
【问题描述】:

我使用 Spring Security 3.2.0.RELEASE

我目前正在将我的应用程序的基于 XML 的 Spring Security 配置迁移到基于 JavaConfig 的 Spring Security 配置。

在旧的security.xml 中,我配置了一个基于JDBCUserDetailsService,如下所示:

<authentication-manager alias="authenticationManager">
    <authentication-provider>
        <password-encoder ref="passwordEncoder" />
        <!-- parsed by JdbcUserServiceBeanDefinitionParser -->
        <!-- the following creates a JdbcUserDetailsManager -->
        <jdbc-user-service data-source-ref="dataSource" />
    </authentication-provider>
</authentication-manager>

除其他效果外,上述 XML 配置 自动注册了一个 JdbcUserDetailsManager 类型的 Spring Bean UserDetailsService 的子类型),我可以将其注入到其他组件中,例如所以:

@Service
public class MyCustomService {

    @Inject
    private JdbcUserDetailsManager judm;

    //...
}

我对上述 XML 的基于 JavaConfig 的改编如下所示:

@Configuration
// @ImportResource("classpath:to/no/longer/needed/security.xml")
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .jdbcAuthentication()
            .passwordEncoder( somePasswordEncoder )
            .dataSource( someDataSource );
    }

    // ...
}

以上 JavaConfig 配置似乎没有额外注册 JdbcUserDetailsManager 类型的 Spring Bean。这意味着MyCustomService 不会被注入这样的bean,因此我得到NoSuchBeanDefinitionException

 org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.provisioning.JdbcUserDetailsManager] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@javax.inject.Inject()}

使用 JavaConfig 方法,我如何获取 JdbcUserDetailsManager 类型的 bean?

【问题讨论】:

    标签: spring-security spring-java-config


    【解决方案1】:

    你有没有尝试添加

    @Bean
    public JdbcUserDetailsManager jdbcUserDetailsManager(){
        return new JdbcUserDetailsManager();
    }
    

    到你的 SecurityConfig 类?

    【讨论】:

      猜你喜欢
      • 2012-06-11
      • 1970-01-01
      • 2013-02-11
      • 1970-01-01
      • 1970-01-01
      • 2013-05-12
      • 2013-06-30
      • 2015-04-07
      • 2016-03-29
      相关资源
      最近更新 更多