我创建了其他身份验证提供程序。我正在注册他们如下:
@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提前感谢任何提示。最诚挚的问候
答案 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
。通过使用如上所述的自动装配实例,默认AuthenticationManager
(ProviderManager
,后者又委托给一个或多个已配置的AuthorizationProvider
实例。
您可能还需要使用以下命令注释配置类:
@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
这样您的访问控制规则就会在Spring Boot为您配置的默认值之前应用。