春のセキュリティアプリケーションのユーザー・クラス

タイムズ:

私は現在、JPA / Hibernateと角度2のフロントエンドとマルチユーザー春ブートアプリケーションを開発しています。ベンダーと顧客:私は、ユーザーの2つの基本的な種類を想定しています。

コードに開始する前に、私はクラスとUMLのクラス図細工Userと2つのサブクラスCustomerとしますVendorサブクラスの理由は、彼らが異なる属性を持っているということである。例えば、Aベンダー、顧客はお気に入りを保存することができる必要があり、一方、自分自身についての一般的な説明を記述することができるはずです。

以下の写真は私のクラス図の抜粋です。

UMLクラス図スニペット

それはログイン/登録機能と私の最初のアプリだとして、私は春のセキュリティが強化されたログインと登録機能を実装する方法についてのチュートリアルを読み始めました。時間が経つにつれて、私は基本的にすべてのサンプルが一つだけ含まれていることを認識しなければならなかったUserその特権彼の時に決定されているクラス、Role一般的に上記の機能の上に達成するために推奨される/必要なクラスであるのを、。

ように私には見えるUserクラスはサブクラスを持つことが意図されていませんが、自然にチュートリアルやサンプルは、主に基本的な設定ではなく、完全に異なるユーザーとの複雑なビジネスモデルの表現をカバーしています。

私の質問は以下の通りである:のサブクラスを作成することは可能であるとことをお勧めUser私はカスタムと承認に使用するクラスUserDetailsServiceクラスを?そうでない場合は、属性からマージをお勧めしますCustomerVendorにクラスをUserクラスと、その結果に応じ決定User、彼は特定の属性を持つことができるようにしたい場合の役割とそれ以外の場合は、単にnullになりますか?

事前のおかげでたくさん!

JworKer:

春のセキュリティの仕事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;
        //...
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=188333&siteId=1