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)方法是您編寫自己的自定義邏輯以啓用/禁用特定身份驗證提供程序的理想場所。