spring security无法添加自定义身份验证提供程序

时间:2015-10-08 19:30:36

标签: spring authentication spring-security spring-boot

我创建了其他身份验证提供程序。我正在注册他们如下:

@Configuration
@EnableWebMvcSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
class SecurityConfig extends WebSecurityConfigurerAdapter{

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(tokenAP());
        auth.authenticationProvider(usernameAndPasswordAP());
        auth.userDetailsService(getUserDetailsService());
    }

稍后在我的代码中,我使用AuthenticationManager对用户进行身份验证。问题是我在身份验证管理器中只注册了一个身份验证提供程序,即DaoAuthenticationProvider。看起来我的身份验证提供程序根本没有注册。我应该做一些额外的配置才能使它工作吗?我正在使用spring boot 1.2.6提前感谢任何提示。最诚挚的问候

1 个答案:

答案 0 :(得分:1)

我们在Spring Boot Web应用程序中配置身份验证提供程序的方式与the example Spring Security Java configuration from the current release reference guide中讨论的方式类似,后者修改了默认的自动装配AuthenticationManagerBuilder。使用您的方法,它可能看起来像:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
  auth.authenticationProvider(tokenAP())
    .authenticationProvider(usernameAndPasswordAP())
    .userDetailsService(getUserDetailsService());
}

如果我正确阅读the Javadocs for the configure(AuthenticationManagerBuilder) method,当您覆盖此方法时,您必须指定自己的AuthenticationManager。通过使用如上所述的自动装配实例,默认AuthenticationManagerProviderManager,后者又委托给一个或多个已配置的AuthorizationProvider实例。

您可能还需要使用以下命令注释配置类:

@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)

这样您的访问控制规则就会在Spring Boot为您配置的默认值之前应用。