2016-11-22 166 views
0

我正在開發混合移動應用程序,並已基於spring mvc和hibernate實現基於java的rest api。我使用MySql作爲數據庫。爲了驗證,我實現了Oauth2.0。多租戶數據庫與彈簧mvc,休眠和Oauth2

目前我有一個客戶端,所以我使用單個數據源。但我的要求改變了,我有5個客戶,每個有1000個用戶。所以決定使用多租戶獨立數據庫方案。但也有一些用戶需要從所有租戶或租戶組合中獲取數據,並在某些計算後在儀表板中顯示其結果。

我還想實現一個額外的獨立承租人特定隊列層,其中包含承租人特定請求。

我該怎麼做?

+0

請張貼一些代碼行(Java類,屬性文件,...) – emoleumassi

+0

難道僅僅是多租戶或者是它也應用程序,或者你將有5個實例數據庫的應用程序(可能在同一個web容器上)? –

+0

他們是同一組的不同學校,所以我決定提供相同的應用程序,但保留數據在單獨的數據庫,但高層管理人員有權訪問所有數據庫。 –

回答

0

我已經使用EclipseLink並支持MySQL(和其他6個DBMS)實現了這樣的事情。在這種情況下,應用程序在企業內部使用,但您可以讓多個項目隔離不同的部門(租戶),並且可以定義可以查看所有項目數據的用戶。

關鍵是要在您的ER圖中引入租戶實體作爲頂級實體,而其他每個實體都屬於租戶。

@Entity 
public class Tenant { 

    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private Long id; 

    @OneToMany(mappedBy = "tenant", cascade = CascadeType.ALL) 
    private Collection<User> users; 

    @OneToMany(mappedBy = "tenant", cascade = CascadeType.ALL) 
    private Collection<TenantConfiguration> configurations; 
} 

你將不得不處理的一個挑戰是安全性。在每個請求中,您必須驗證用戶是否有權訪問請求的實體(不要信任前端)。這意味着您的OAuth2身份驗證(在登錄期間創建)需要包含對實體的引用,以允許您確定用戶租期和權限。出於性能考慮,您通常在JPA查詢中包含Tenancy(TENANCY_ID),以避免加載大量數據並將其過濾到內存中。

好運

+0

來實現這個我需要建立一箇中央數據庫包含登錄信息以及身份驗證令牌信息? –

+0

克勞斯Groenbaek:我實現了這個,但問題是當我實施管理[在多個租戶中有多個角色]時,我必須從相應的租戶根據他們的角色獲取數據並執行一些操作。 –