0

即时通讯目前正致力于一个Spring MVC的Web应用程序,我们已经通过本地数据库使用authtication与AbstractUserDetailsAuthenticationProvider类的IMPL验证提供之间切换提供安全。春季安全性 - 春天在运行时(本地数据库或远程LDAP)

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

想知道如何实际执行此操作。已经找到AbstractLdapAuthenticationProvider。然而,仅仅将这个额外的身份验证提供程序添加到身份验证管理器并不足以应付天气,应该在运行时通过数据库中的标志来确定。

真的很感谢这方面的帮助。

感谢您的阅读:)

+0

看看这个问题及其答案,应该让你开始:http://stackoverflow.com/questions/21381893/use-different-authenticationprovider-depending-on-username-and-remote-ip-address – yglodt

回答

0

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

要在运行时跳过LDAP检查,请从本地数据库提供者处抛出AccountStatusException(它的一个子类,因为抽象)。这使得身份验证管理器跳过了更多的提供者,在你的情况下LDAP。

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

+0

嗨holmis83感谢您的回应!只是想知道如果我在身份验证管理器和当我抛出* AccountStatusException *的impl时将身份验证提供程序添加到一起,将使我的所有登录无效吗?! –

+0

@jiachen是的,那将完全失败的认证。 – holmis83

0

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