2011-08-02 168 views
3

我有一個基於Spring MVC的應用程序,它使用Hibernate來處理所有數據庫交互需求。現在需要更新應用程序以使用我們的LDAP基礎結構來驅動用戶信息,包括基本用戶數據(如姓名和電子郵件)以及身份驗證和授權需求。如何用Spring Security,Spring LDAP和Hibernate處理用戶信息?

既然一切都已經在一個地方(在DB)到現在爲止,該報告是相當簡單的,因爲Hibernate是信息檢索管理需要與所需的查詢啓動時。抓取用戶的名字等非常簡單,因爲Hibernate懶惰地加載數據。

隨着驅動與LDAP用戶信息的慾望,Hibernate將不再能夠填充在飛行中的用戶信息,因爲它不會是管理用戶的數據。當我們需要抓取用戶數據如姓名等時,我們應該如何使用LDAP來驅動用戶數據並處理認證/授權,而不會造成太大的痛苦?

我們已經使用其中LDAP被視爲「源」爲數據和當前系統被保持原樣混合方法考慮。這將需要更改事務處理代碼以根據LDAP進行更新,以便實時事務使用最新信息,並且還需要與LDAP進行定期同步,以使應用程序數據庫保持最新以用於報告目的。

該解決方案似乎有點哈克,而且似乎有很多運動部件的,但我找不到太多關於這個問題在網絡上的其他地方。

應該如何用戶信息處理/應該如何應用結構化,讓所有的用戶信息仍然很方便,可以很容易地捆綁到系統的其餘部分用於報告的目的呢?有沒有一種方法可以集成Spring LDAP和Hibernate,使數據層以上的層不必知道?或者將LDAP中的信息拉入現有數據庫是最簡單的方法?

+0

您的數據模型是否有任何對用戶的引用,以至於您仍然需要用戶數據庫實體? – Ralph

+0

@Ralph - 是的,其他實體連接到特定用戶(例如,用戶X採取了行動Y)。 – cdeszaq

回答

1

整合如果你不能刪除用戶表可言,因爲它是從其他實體使用,那麼我的建議是從商業的東西separete安全的東西。

這意味着除去只爲安全需要從用戶表信息(登錄名,密碼,...),所以只有東西仍然實現理財週報案件是必要的。

然後重寫安全性內容,以便基於LDAP。我想你會找到一種方法來獲取給定prinipal的用戶數據庫對象。

只有一件事情會留下來,如果新用戶獲得新的登錄名,如何創建新的用戶數據庫實體。你有3種選擇,什麼是最好的一個強烈依賴於你的應用程序:

  • 創建數據庫實體,如果用戶首次登錄
  • 創建數據庫實體,如果你首先需要它
  • 創建數據庫實體當它在LDAO(或稍後的一些小型站點)中創建時,例如使用cron作業或某些Spring調度服務。
+1

這是我一起去的解決方案。用戶信息(系統上的帳戶以及帳戶中的信息)都通過時間作業從LDAP中提取。 – cdeszaq

相關問題