首页 > 解决方案 > Spring boot - 如何使用 2 个身份验证提供程序

问题描述

我正在尝试使用 Kotlin 将 2 个身份验证提供程序与 Spring Boot 一起使用:

这个方法在一个类中:

@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@Import(SecurityProblemSupport::class)
class SecurityConfiguration(
    ...
) : WebSecurityConfigurerAdapter() {
  @Throws(Exception::class)
  override fun configure(auth: AuthenticationManagerBuilder) {
      //super.configure(auth); DON'T DO THIS - for sure...
      val dap = DaoAuthenticationProvider()
      dap.setUserDetailsService(domanUserDetailsService)
      auth.authenticationProvider(LegacyUserDaoAuthenticationProvider(legacyUserService)) . 
      auth.authenticationProvider(dap)
     // Breakpoint here shows that both authentication providers are in the builder
  }
...
}

当我在应用程序运行后运行调试器时,ProviderManager只有 1 个提供程序。不知何故,AuthenticationManagerBuilder没有使用authenticationProvider这里添加的 2 s。我验证了我的configure方法正在被调用,并且AuthenticationManagerBuilder在此方法之后有 2 个身份验证提供程序。

我在这里完成的设置发生了一些事情(或者 Spring 没有使用AuthenticationManagerBuilder我设置的设置。

有谁知道为什么?

标签: springspring-bootkotlin

解决方案


我想知道是否正在配置另一个安全性或正在加载自动配置。您可以尝试@Order(1)在配置中进行设置。


推荐阅读