2013-07-22 65 views
1

我目前正在使用spring-security庫,我問自己以下問題:我應該如何將我的數據庫模型與spring-security表結合起來?如您所知,Spring-Security需要兩張表(用戶和權限)來定義數據庫中的認證管理器。從我的POV現在有兩種可能性在哪裏存儲我的其他用戶的信息(如電子郵件,姓氏,最後登錄的,....)彈簧安全數據模型

  1. 我能有一個簡單的用戶表進行身份驗證目的和另一個爲其餘(用戶名連接)

  2. 我用我的必要屬性擴展spring-security的用戶表。

從你的角度來看,最好的設計是什麼?你有什麼經驗?

Lomu

+0

我創建了派生類來表示不同類型的用戶。例如'ProfiledUser擴展用戶'。 – MaVVamaldo

+0

您是否在休眠和ProfiledUser pojo中爲此創建了「User」pojo? –

+0

我需要更多空間,所以我發佈了我的答案。 – MaVVamaldo

回答

2

我創建了一個POJO User代表用戶實體通過Spring Security的庫所設想,其次我創建了一個POJO ProfiledUser代表一種特殊類型的我的應用程序的用戶。它被稱爲ProfiledUser,因爲我需要一個用戶關聯到配置文件。當然,類似的方法可以應用於您需要表示的每種類型的用戶。基本上,如果你需要多種類型的用戶,你可以讓你的類擴展用戶POJO。 在下面,您將找到具有JPA註釋的類。

@Entity 
@Table(name="USERS") 
@Inheritance(strategy=InheritanceType.JOINED) 
public class User implements UserDetails { 

    private static final long serialVersionUID = 1L; 
    private long id; 
    private String username; 
    private String password; 
    private boolean enabled = true; 
    Set<Authority> authorities = new HashSet<Authority>(); 
    //...getters & setters 
    } 

@Entity 
@Table(name="PROFILED_USERS") 
public class ProfiledUser extends User{ 

    private static final long serialVersionUID = 1L; 
    //some custom attributes 
    private PersonalData personalData; 
    private ContactData contactData; 
    private AddressData addressData; 
    //...getters & setters 

    } 

如果你需要僅僅代表一種類型的用戶,我認爲它應該工作到屬性添加到User類。不過,我更喜歡將Spring Security框架定義的用戶抽象概念與業務邏輯分開。所以我建議實施你自己的SomethingUser並延長User班。

0

一個人是一個人,你應該有一個班級/表代表一個人和匕首;。

用戶是一個用戶,與人不同(因此是兩個不同的詞),你應該有一個表示用戶的類/表。

沒有用戶可以存在嗎?是

用戶是否可以在沒有人的情況下存在?不,用戶名屬於某人。

@Entity 
abstract class Party { 

    @Id 
    Long id; 

    String name; 

    @OneToMany 
    List<User> usernames = new ArrayList<>(); 
} 

@Entity 
class Individual extends Party { 
    DateTime dateOfBirth; 
} 

@Entity 
class User { 

    @ManyToOne 
    Party party; 

    String username; 

    String password; //you better use BCrypt/Blowfish hashing! 

    Boolean enabled = true; 
} 

如果您只希望每個參與方都有一個用戶名,您可以使用@OneToOne關係。

&dagger;其實你應該有一個更抽象的類/表代表法定的一方。