- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Spring Security 4.0.1 并希望使用多个身份验证提供程序使用基于 Java 的配置进行身份验证。如何指定提供商顺序?
我希望使用 AuthenticationManagerBuilder ,因为这就是 WebSecurityConfigurerAdapter.configureGlobal()
公开的内容,但我看不到任何指定顺序的方法。我需要创建一个 ProviderManager 吗?手动?
更新:这是根据 Arun 的回答对问题进行的澄清。我想使用的特定提供程序是 ActiveDirectoryLdapAuthenticationProvider
和 DaoAuthenticationProvider
用于自定义 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/
我正在编写一个 Google Chrome 扩展程序,它需要我使用 Spring 设置的用户身份验证,目前我的代码中有几个示例用户名和密码,而我仍在开发中。此时,我已准备好添加真实的用户名和密码,但我
我正在使用 Spring Security 4.0.1 并希望使用多个身份验证提供程序使用基于 Java 的配置进行身份验证。如何指定提供商顺序? 我希望使用 AuthenticationManage
我正在使用 Spring Boot 2.0(利用 Spring Security 5.0)。我正在尝试向 WebSecurityConfigurerAdapter 子类中的 Authenticatio
谁能解释一下何时覆盖 configure(HttpSecurity)、configure(WebSecurity) 和 configure(AuthenticationManagerBuilder)?
要在 Spring Boot 中提供自定义身份验证提供程序,我是否需要以下两项?它们有什么区别? AuthenticationManagerBuilder HttpSecurity.authentic
我正在研究基于 Spring Security Java 的配置。 我已经创建了我自己的 MyAuthenticationProvider,我想在 ProviderManager 中注册它(Authe
我正在配置 Spring Security。为了验证和授权用户,我覆盖了 configure(AuthenticationManagerBuilder auth)的 WebSecurityConfig
我有一个 SpringBoot 2.0.1.RELEASE mvc 应用程序,因此在安全配置中我定义了此方法: @Autowired public void configureGlobal(Auth
所以我正在研究 Spring Security 的实现。我遇到了一段我无法理解的代码。因此,根据文档,当我们想要自定义 Spring 使用的 AuthenticationManager 时,需要重写以
我有一个 SpringBoot 2.0.1.RELEASE mvc 应用程序,因此在安全配置中我定义了此方法: @Autowired public void configureGlobal(Auth
我已经设置了样板 spring security 配置器: public class SecurityConfiguration extends WebSecurityConfigurerAdapte
配置 Spring Security 时: @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecur
WebSecurityConfigurerAdapter 提供两个覆盖如下: protected void configure(AuthenticationManagerBuilder auth) 和
我正在 Spring Boot 应用程序中学习 Spring Security,我有一个非常简单的示例。我看到,如果我评论 configure(AuthenticationManagerBuilder
我是一名优秀的程序员,十分优秀!