gpt4 book ai didi

java - 使用 AuthenticationManagerBuilder 的提供商订单

转载 作者:搜寻专家 更新时间:2023-10-31 20:27:13 24 4
gpt4 key购买 nike

我正在使用 Spring Security 4.0.1 并希望使用多个身份验证提供程序使用基于 Java 的配置进行身份验证。如何指定提供商顺序?

我希望使用 AuthenticationManagerBuilder ,因为这就是 WebSecurityConfigurerAdapter.configureGlobal() 公开的内容,但我看不到任何指定顺序的方法。我需要创建一个 ProviderManager 吗?手动?

更新:这是根据 Arun 的回答对问题进行的澄清。我想使用的特定提供程序是 ActiveDirectoryLdapAuthenticationProviderDaoAuthenticationProvider 用于自定义 UserService

最终,我想先针对 DaoAuthenticationProvider 进行身份验证,然后再针对 ActiveDirectoryLdapAuthenticationProvider 进行身份验证。

AD 提供程序涉及对 AuthenticationManagerBuilder.authenticationProvider() 的调用,但 DAO 提供程序涉及调用 AuthenticationManagerBuilder.userService(),这会创建一个 DaoAuthenticationProvider 围绕幕后的用户服务。查看源代码,它不会直接将提供者放在提供者列表中(它会创建一个配置器),因此 Arun 的回答在这里对我不起作用。

我尝试手动创建 DaoAuthenticationProvider 并将其传递给 authenticationProvider()。它没有影响订单。

最佳答案

我在配置方法中尝试了一个 objectPostProcessor,它起作用了。不确定这是否是您想要的:

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.jdbcAuthentication().dataSource(dataSource)
.passwordEncoder(new BCryptPasswordEncoder());
auth.authenticationProvider(new CustomAuthenticationProvider(this.dataSource));

auth.objectPostProcessor(new ObjectPostProcessor<Object>() {
@Override
public <O> O postProcess(O object) {
ProviderManager providerManager = (ProviderManager) object;
Collections.swap(providerManager.getProviders(), 0, 1);
return object;
}
});
}

这是您的 WebSecurityConfigurerAdapter 继承类上的 configure 方法。

对象后处理器的原因是我们需要等待 AuthenticationManagerBuilder 实际构建对象,然后才能访问和更改提供者列表的顺序。

希望对您有所帮助。如果您有任何问题,请告诉我。

关于java - 使用 AuthenticationManagerBuilder 的提供商订单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31302262/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com