私は現在、JPA / Hibernateと角度2のフロントエンドとマルチユーザー春ブートアプリケーションを開発しています。ベンダーと顧客:私は、ユーザーの2つの基本的な種類を想定しています。
コードに開始する前に、私はクラスとUMLのクラス図細工User
と2つのサブクラスCustomer
としますVendor
。サブクラスの理由は、彼らが異なる属性を持っているということである。例えば、Aベンダー、顧客はお気に入りを保存することができる必要があり、一方、自分自身についての一般的な説明を記述することができるはずです。
以下の写真は私のクラス図の抜粋です。
それはログイン/登録機能と私の最初のアプリだとして、私は春のセキュリティが強化されたログインと登録機能を実装する方法についてのチュートリアルを読み始めました。時間が経つにつれて、私は基本的にすべてのサンプルが一つだけ含まれていることを認識しなければならなかったUser
その特権彼の時に決定されているクラス、Role
一般的に上記の機能の上に達成するために推奨される/必要なクラスであるのを、。
ように私には見えるUser
クラスはサブクラスを持つことが意図されていませんが、自然にチュートリアルやサンプルは、主に基本的な設定ではなく、完全に異なるユーザーとの複雑なビジネスモデルの表現をカバーしています。
私の質問は以下の通りである:のサブクラスを作成することは可能であるとことをお勧めUser
私はカスタムと承認に使用するクラスUserDetailsService
クラスを?そうでない場合は、属性からマージをお勧めしますCustomer
とVendor
にクラスをUser
クラスと、その結果に応じ決定User
、彼は特定の属性を持つことができるようにしたい場合の役割とそれ以外の場合は、単にnullになりますか?
事前のおかげでたくさん!
春のセキュリティの仕事UserDetailsService
認証およびAUTHORIZEの機能のためのインタフェース。あなたは、実装する必要がありloadUserByUsername
、負荷のための機能をUser
データベースから、あるいはメモリまたは任意の場所。
春のセキュリティの作業UserDetails
モデルとしてインターフェイス。したがって、あなたUser
実装するエンティティの必要性UserDetails
春のセキュリティはそれと働くことができるというインターフェースを。
さて、あなたは持っているUser
他の企業と同様に継承することができますエンティティをし、あなたがそれに注釈を付けることができます@Inheritance
ように、以下の:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class User implements UserDetails {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Length(min=5)
private String password;
private String username;
@Email
private String email;
private String phoneNumber;
private boolean enabled;
private boolean verified;
@ManyToMany(cascade = CascadeType.ALL,fetch = FetchType.EAGER)
private Set<Authority> roles= new HashSet<>();
//...
}
@Entity
public class Vendor extends User{
private String name;
private String description;
private Date openingTime;
private Date closingTime;
@ManyToOne
private List<File> images;
//...
}
@Entity
public class Customer extends User{
private String forename;
private String surname;
@ManyToOne
private List<PaymentDetails> paymentDetailsList;
//...
}