Компонент UserDetailsService отсутствует после миграции Spring Security с XML на JavaConfig

Я использую Spring Security 3.2.0.RELEASE.

В настоящее время я переношу конфигурацию Spring Security моего приложения на основе XML в конфигурацию Spring Security на основе JavaConfig.

В старой версии security.xml я настроил UserDetailsService на основе JDBC следующим образом:

<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 автоматически зарегистрировала Spring Bean типа JdbcUserDetailsManager (подтип 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 похоже, не регистрирует Spring Bean типа JdbcUserDetailsManager. Это означает, что 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, как я могу получить bean-компонент типа JdbcUserDetailsManager?


person Abdull    schedule 20.02.2014    source источник


Ответы (1)


ты пытался добавить

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

к вашему классу SecurityConfig?

person freakman    schedule 23.02.2014