2017-02-01 5 views
0

Spring Securityが提供するUserとAuthoritiesから属性を取得しようとしています。Spring SecurityからUser Classを拡張し、JPAを使用してテーブルを作成する方法

独自のカスタムクラスを作成するためにUserDetailsS​​erviceをオーバーライドすることができますが、この場合は完全なデフォルトクラスを取得したいだけでなく、さらにいくつかの属性を取得する必要があります。

は私のコードで説明しましょう:

public class User implements UserDetails, CredentialsContainer { 

private static final long serialVersionUID = SpringSecurityCoreVersion.SERIAL_VERSION_UID; 

private String password; 
private final String username; 
private final Set<GrantedAuthority> authorities; 
private final boolean accountNonExpired; 
private final boolean accountNonLocked; 
private final boolean credentialsNonExpired; 
private final boolean enabled; 
} 

これは春のセキュリティが提供するユーザークラスであり、私がしたいことには、これらの属性を使用して独自のクラスを拡張しています。 は、私はこれを試してみましたが、データベースは、ユーザーからの属性を取得できません:

@Entity 
@Table(name="MyUser") 

public class ExtendedUser extends User { 

    @Id 
    @GeneratedValue(strategy=GenerationType.IDENTITY) 
    private long id; 

    private String email; 


    private static final long serialVersionUID = -2147191899215904479L; 

    public ExtendedUser(String username, String password, boolean enabled, boolean accountNonExpired, 
     boolean credentialsNonExpired, boolean accountNonLocked, 
     Collection<? extends GrantedAuthority> authorities) { 
     super(username, password, enabled, accountNonExpired, credentialsNonExpired, accountNonLocked, authorities); 
    // TODO Auto-generated constructor stub 
} 
. 
. 
. 

私の質問、私はこれらの属性を継承し、休止状態を作るためにJPAのアノテーションを使用するために自分のUserクラスを作成する必要がありますされます"それを理解します?

私はここで何か迷いがあると思うが、私はそれを理解できない。

+0

エンティティとして注釈が付けられている「ユーザー」はありますか?そうでない場合は、JPAドキュメントに従って、_orm.xml_ファイルを使用してマッピングします。 –

+0

いいえ、そうではありません。 私は現在使用しているJava ConfigとXM​​L Configを混在させたくありません。なぜなら、ライブラリ内にあるので、その注釈をUserクラスに追加できないからです。 ナロスが説明した方法を使用すると思います。 ありがとうございました。 –

+0

SpringセキュリティからUserクラスを拡張する必要はありません。よりクリーンでシンプルなソリューションは、ExtendedUserクラスにUserDetailsインターフェイスを実装させることです。 –

答えて

3

JPAでは、あなたは非推奨HBMのXMLを使用することができ、orm.xmlまたは休止状態でそれをマッピングします。

実際には、Spring Security Userクラスからのエンティティマッピングを拡張しないことをお勧めします。これは、マッピングを自分の実装と結びつけているため、制御できず、それをアップグレードするのが難しくなります。

代わりに、独自のUserエンティティを作成し、アプリケーションのニーズに合ったモデルに情報を格納することをおすすめします。次に、UserDetailsService実装の一部として、Userエンティティと関連エンティティを取得し、Spring Securityに与える拡張UserDetailsオブジェクトを作成します。

+0

ええ、私は、あなたが独自のカスタムクラスをマップするためにサービスをオーバーライドできることを知っています。これは、Springセキュリティで動作します(UserNameの代わりに、たとえば電子メールにマップすることができます)。 あなたが言ったことは理にかなっています。あなたがコントロールしたいことです。 私は思ったように、私はいくつかのコンセプトをミスリーディングしていました。春はあなたにはあまりにも多くのことをするのですが...それはアイデアです! ありがとうございました。 –

1

Getter/Setterをオーバーライドして、JPAの注釈を追加することができると思います。

+0

私はそれを試して、それが動作するかどうかを確認します、ありがとう。 –

関連する問題