Spring Security - 在运行时在身份验证提供程序之间切换(本地数据库或远程LDAP)

时间:2015-11-06 08:21:07

标签: spring spring-security ldap spring-ldap spring-security-ldap

我目前正在使用Spring MVC Web应用程序,我们一直在通过本地数据库使用authtication,其中包含spring安全性提供的 AbstractUserDetailsAuthenticationProvider 类。

但是,为了进一步保护应用程序,我们决定允许用户通过LDAP / AD服务器进行身份验证。这不是必需的,用户可以选择在门户网站本身的配置中启用它。

想知道如何实际执行此操作。找到了 AbstractLdapAuthenticationProvider 。但是,只是将这个额外的身份验证提供程序添加到身份验证管理器是不够的,因为它应该在运行时由数据库中的标志确定。

非常感谢这方面的任何帮助。

感谢阅读:)

2 个答案:

答案 0 :(得分:0)

可能有多种方法可以做到这一点,但一种简单的方法是为身份验证管理器提供两个身份验证提供程序,首先是本地数据库的身份验证提供程序,第二个是LDAP身份验证提供程序。

要在运行时跳过LDAP检查,请从本地数据库提供程序中抛出AccountStatusException(其子类,因为是抽象的)。这使得身份验证管理器跳过进一步的提供程序,在您的情况下是LDAP。

如果您想为用户提供相反的方法,请将密码设置为空白或本地数据库中的随机值。

答案 1 :(得分:0)

有两个身份验证提供程序,一个用于本地数据库,另一个用于LDAP。 Spring身份验证管理器将调用每个提供程序中的public boolean supports(Class authentication)方法,以查看提供程序是否支持所提供的Authentication类。因此,supports(Class authentication)方法是您编写自己的自定义逻辑以启用/禁用特定身份验证提供程序的理想之选。