2014-09-20 412 views
10

我正在开发Spring Security基于Java的配置。Spring Security如何添加/配置AuthenticationManagerBuilder?

我已经创建了我自己的MyAuthenticationProvider,我想在ProviderManagerAuthenticationManager的单个实例)中注册。

我发现ProviderManager有我可以注册我的单一 MyAuthenticationProvider供应商的列表。

这里是我的配置的一部分:

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.authenticationProvider(MyAuthenticationProvider); 
    } 
} 

我发现AuthenticationManagerBuilderparentAuthenticationManagerdefaultUserDetailsService等众多领域。

我的问题是:

  1. 这哪里是@Autowired注释从加入AuthenticationManagerBuilder权威性? 已经在应用程序上下文中创建了AuthenticationManagerBuilder
  2. 将被注入的AuthenticationManagerBuilder默认状态是什么?默认情况下,我的意思是会有一些parentAuthenticationManager,authenticationProvider已经注册在AuthenticationManagerBuilder
  3. 如果我添加auth.authenticationProvider(MyAuthenticationProvider),这是否意味着我在AuthenticationManagerBuilder中再添加一个提供商?
  4. 这是什么意思?取自Spring Documentation

    configureGlobal方法的名称并不重要。但是, 对于仅在使用@EnableWebSecurity,@EnableWebMvcSecurity, @EnableGlobalMethodSecurity或@EnableGlobalAuthentication注释的类 中配置AuthenticationManagerBuilder非常重要。做 否则有不可预知的结果。

回答

1

答3:

是。 AuthenticationManagerBuilder的代码添加您的供应商:

public AuthenticationManagerBuilder authenticationProvider(AuthenticationProvider authenticationProvider) { 
    this.authenticationProviders.add(authenticationProvider); 
    return this; 
} 

答4很简单:

这意味着,一旦你有注释的一个,你可以如你所愿命名方法:

@Configuration 
@EnableWebSecurity //or @EnableWebMvcSecurity or @EnableGlobalMethodSecurity.... 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    public void myCoolMethodName(AuthenticationManagerBuilder auth) throws Exception { 
     auth.authenticationProvider(MyAuthenticationProvider); 
    } 
} 

“否则这样做有不可预知的结果”

如果保留名称而不是注释,则可能无法使用。

相关问题