2016-07-20 10 views
0

Spring Security Principalにカスタマイズして追加情報を追加しようとしています。そのようなこのSpringカスタムuserDetailはユーザ権限を設定します

How to add additional details to Spring Security userdetails

明示的にtrueに認証値を設定し、この例のように春のドキュメントともいくつかの例を見られて。例:

boolean enabled = true; 
    boolean accountNonExpired = true; 
    boolean credentialsNonExpired = true; 
    boolean accountNonLocked = true; 

    List<String> roles = new ArrayList<String>(); 
    roles.add(domainUser.getRole().getName()); 

    return new CustomSpringUser(
      domainUser.getUsername(), 
      domainUser.getPassword().toLowerCase(), 
      enabled, 
      accountNonExpired, 
      credentialsNonExpired, 
      accountNonLocked, 
      getGrantedAuthorities(roles), 
      ***domainUser.getAccount().getIdentificationId())*** ; 

accountNonExpired、credentialsNonExpired ...などを手動でtrueに設定する代わりに、 User.RoleをチェックしてaccountNontExpired..etcの値を取得するAuthorityメソッドがありますか?

私は彼らが手動でAuthority ....を設定した別の例を見つけました。これは正しい方法ですか?

http://javahotpot.blogspot.in/2013/12/spring-security-adding-more-information.html

おかげ

答えて

0

あなたは(あなたが行ったように)通常のユーザーモデルの拡張機能として、独自のユーザ・モデルを作成する必要があり、あなたが自分で必要な情報を取得する必要があります。

Springのデータベース認証を使用する場合、フィールドaccountNonExpired,credentialsNonExpiredなどがデータベースの列から取得されます。

Springのデータベース認証を使用して、それは単にaccountNonExpiredcredentialsNonExpiredtrueaccountNonLockedを設定します。プロパティenabledがデータベースから取得されます。

結論:はい、これらのフィールドは自分で設定する必要があります。


実際の権限(あなたの場合のユーザ)のラッパーであるAuthenticationオブジェクトの権限オブジェクトを設定setAuthority(..)方法。 Authenticationオブジェクトは、SecurityContextHolderから取得することができ、認証ステータス(例えば、ユーザが認証されているかどうか)を格納するために使用されます。

+0

"Springのデータベース認証を使用すると、accountNonExpired、credentialsNonExpiredなどのフィールドがデータベースの列から取得されます。 < - 本当ですか?これは、春のドキュメントhttp://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#user-schemaからのユーザースキーマです。列には資格情報がありません。その他は、 –

+0

@EricHuang Oh、あなたが正しいです。私はこれをLDAP認証と一緒に投げたと思う。 しかし、私は再びコードを見て、 'JdbcDaoImpl'は3つのフィールドを' true'に設定するだけです(https://github.com/spring-projects/spring-security/blob/master/core/を参照)。 src/main/java/org/springframework/security/core/userdetails/jdbc/JdbcDaoImpl.java)。だから同じことをするのは大丈夫です。 –

+0

@EricHuang私は自分の答えを更新しました。 –

関連する問題