2013-01-18 75 views
1

我們如何才能將用戶遷移從一個數據庫到另一個使用Spring Security的,在即時和對用戶透明?使用Spring Security創建的登錄用戶

背景

我們在Web應用程序中使用Spring Security與基於表單的身份驗證。我們的配置使用由用戶數據庫支持的標準Spring JDBC組件。但是,我們還有一個來自舊系統的用戶數據庫,其數量大約是新用戶數量的十倍。我們希望允許舊數據庫中的用戶也登錄。對用戶來說,這應該是完全透明的。

由於大多數舊數據庫中的用戶的積極性不高了,我們不希望所有的人都遷移到新的數據庫。出於性能的考慮,我們希望保持新的用戶數據庫儘可能小,同時還包含所有活躍用戶。經過一段時間後,我們希望斷開舊的用戶數據庫,從而有效地刪除所有不活動的用戶。

,我們已經來到了我們的想法是遷移用戶需求。當一個不存在的用戶(不在新數據庫中)嘗試登錄時,我們要檢查用戶是否可以針對舊用戶數據庫進行身份驗證,並在這種情況下將用戶遷移到新數據庫並自動登錄。

有在Spring Security框架許多擴展點,問題是哪一個會適合我們的目的是什麼?

回答

0

我覺得最好的地方是org.springframework.security.authentication。 AuthenticationManager。您可以準備兩個不同的AuthenticationProvider實例(用於新舊數據庫)。如果你將它們注入到Defult AuthenticationManager中(實際上它是ProviderManager類),那麼它將遍歷這兩個提供者,併爲您提供第一個成功的身份驗證結果。您的自定義的AuthenticationManager會略有不同的邏輯:

  • 就會知道兩家供應商
  • 首先之間的差異將在BadCredentialsException的情況下,檢查新的數據庫
  • 將檢查舊的數據庫
  • 如果用戶通過舊數據庫進行身份驗證,那麼它會複製帳戶記錄
  • 這將是一個好主意召回第一個AuthenticationProvider以確保一切正常
+0

謝謝Maksym,我們會試試你的方法。 –