【发布时间】:2014-02-20 19:19:19
【问题描述】:
我使用 Spring Security 3.2.0.RELEASE。
我目前正在将我的应用程序的基于 XML 的 Spring Security 配置迁移到基于 JavaConfig 的 Spring Security 配置。
在旧的security.xml 中,我配置了一个基于JDBC 的UserDetailsService,如下所示:
<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