如何在Spring Security的同一请求中使用两个身份验证提供程序?

时间:2015-03-13 17:14:39

标签: spring authentication spring-security

我在我的应用程序中配置了两个身份验证提供程序,一个使用LDAP,另一个使用数据库查找:

<sec:authentication-manager>
    <sec:ldap-authentication-provider server-ref="ldapServer" />
    <sec:authentication-provider user-service-ref="dbUserDetailsService" />
</sec:authentication-manager>

Spring首先尝试使用LDAP,如果在那里找不到用户,它会尝试我的自定义提供程序。

我想要做的是强制Spring对所有可用提供商中的用户进行身份验证。在这种情况下,它只会尝试我的自定义提供程序,如果它可以首先在LDAP服务器中执行登录。如果自定义提供程序中的身份验证失败,则整个身份验证将失败。

使用Spring Security可以实现这个目标吗?

1 个答案:

答案 0 :(得分:1)

我认为你可以实现自己的身份验证提供程序,在其中注入两个实例 - 一个是LdapAuthenticationProvider,另一个是DaoAuthenticationProvider。 您必须实现一个方法

public Authentication authenticate(Authentication authentication) throws AuthenticationException

您可以将身份验证调用首先代理到LdapAuthenticationProvider,如果成功,则调用DaoAuthenticationProvider。