Spring security 在同一身份验证管理器中列出多个身份验证提供程序

Spring security 在同一身份验证管理器中列出多个身份验证提供程序,spring-security,Spring Security,我在调试身份验证问题时遇到以下代码段: <security:authentication-manager> <security:authentication-provider user-service-ref="userDetailsService"> <security:password-encoder hash="sha-256"> <

我在调试身份验证问题时遇到以下代码段:

 <security:authentication-manager>
         <security:authentication-provider  user-service-ref="userDetailsService">
            <security:password-encoder hash="sha-256">
                <security:salt-source user-property="dateCreated" />
            </security:password-encoder>
         </security:authentication-provider>
         <security:authentication-provider ref="ldapAuthProvider" />
    </security:authentication-manager>

在调试和使用用户凭据时,我注意到,如果第一个身份验证提供程序(即
userDetailsService
)未能对我的用户进行身份验证,则会远程调用我的LDAP服务器以尝试对我的用户进行身份验证。但是,如果第一个身份验证提供程序成功地对我的用户进行了身份验证,则不会调用第二个身份验证提供程序

我的问题是,这些身份验证提供者的列表是否以一种方式工作,如果其中一个失败,我们应该跳到下一个?我还想知道身份验证管理器中列出的身份验证提供者的顺序是否起到了一定的作用(从优先级的角度看)?如果您能从Spring Security的官方文档中获得额外参考,我们将不胜感激。

来自Spring Security:

每个AuthenticationProvider都有机会表明身份验证应该成功、失败,或者表明它无法做出决定,并允许下游AuthenticationProvider做出决定。如果配置的AuthenticationProviders都无法进行身份验证,则身份验证将失败(…)

实际上,每个AuthenticationProvider都知道如何执行特定类型的身份验证。例如,一个AuthenticationProvider可能能够验证用户名/密码,而另一个可能能够验证SAML断言

当定义了多个
AuthenticationProviders
时,将按照声明的顺序查询它们。

如果第一个
AuthenticationProvider
无法得出结论,它将允许下一个
AuthenticationProvider
尝试。

不再使用spring的旧xml配置方式。使用基于注释的现代注释way@Jens我实际上是在维护一个现有的解决方案。源代码很旧。