Spring Security Java配置:使用GlobalAuthenticationConfigurerAdapter配置AuthenticationManagerBuilder失败
我不知道如何实现GlobalAuthenticationConfigurerAdapter的子类。根据SecurityConfigure接口的文档,init(SecurityBuilder)的实现不应在传递的SecurityBuilder对象上设置属性。相反,这应该在configure(SecurityBuilder)方法中完成。因此,我尝试了以下实现:Spring Security Java配置:使用GlobalAuthenticationConfigurerAdapter配置AuthenticationManagerBuilder失败,java,spring,spring-security,spring-java-config,Java,Spring,Spring Security,Spring Java Config,我不知道如何实现GlobalAuthenticationConfigurerAdapter的子类。根据SecurityConfigure接口的文档,init(SecurityBuilder)的实现不应在传递的SecurityBuilder对象上设置属性。相反,这应该在configure(SecurityBuilder)方法中完成。因此,我尝试了以下实现: @Configuration protected static class AuthenticationConfiguration exten
@Configuration
protected static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter {
@Autowired
private WebUserDetailsService userDetailsService;
@Autowired
private WebUserPasswordEncoder passwordEncoder;
@Override
public void configure (AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(this.userDetailsService).passwordEncoder(this.passwordEncoder);
}
}
public boolean isConfigured() {
return order >= CONFIGURING.order;
}
由于框架AbstractConfiguredSecurityBuilder中的以下检查,此配置在启动期间失败:
if(buildState.isConfigured()) {
throw new IllegalStateException("Cannot apply "+configurer+" to already built object");
}
BuildState.isConfigured()具有以下(令人惊讶的)实现:
@Configuration
protected static class AuthenticationConfiguration extends GlobalAuthenticationConfigurerAdapter {
@Autowired
private WebUserDetailsService userDetailsService;
@Autowired
private WebUserPasswordEncoder passwordEncoder;
@Override
public void configure (AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(this.userDetailsService).passwordEncoder(this.passwordEncoder);
}
}
public boolean isConfigured() {
return order >= CONFIGURING.order;
}
它实际上会检查构建是否当前处于配置阶段(如javadoc中所述),但不会检查它是否已经配置(我猜这将是构建状态),正如方法名称所示
所以我的问题是:这是预期的行为还是Java配置中的错误?我在web上找到的所有其他示例通常都是在init()方法中配置生成器的,所以我可能只是没有正确理解文档
编辑:使用Spring Security 3.2.6
谢谢