2012-03-28 15 views
4

Spring Securityでセキュリティの側面を実装しているうちに、AuthenticationUserDetailsの両方にgetAuthorities,などの重複したメソッドがあることに気付きました。なぜ、SpringはAuthenticationとUserDetailsのフィールドを重複していますか?

この背景には何がありますか?私には無用な冗長性のようだ。

編集:人々は署名をチェックするのが面倒です。両方のインタフェースには同じメソッドがあります。私はそのことを言及していないとgetCredentialsgetAuthoritiesは同じです。なぜその地元の人々はその仮定を作るのですか?

+0

私もこのことに驚いています。私は良い説明はありません。私はカスタムのAuthenticationProviderを実装し、 'authenticate()'メソッドを実装しました。これは返さなければなりません: 'new new UsernamePasswordAuthenticationToken(新しいユーザ(ユーザ名、パスワード、AUTHORITIES)、パスワード、AUTHORITIES);' – MarcFasel

+0

春のセキュリティのいくつかの試験の後、私はこれを次のように考えます: 'Authentication'はSpring Securityだけが使用します。 'UserDetails'はクライアントコードのみを対象としています。異なるコーディング日付のために、それらは幾分交差する。だから、 'Authentication'はあなたのためではないことに留意してください。うまくいけば、彼らはSpring Security 3.0でそれを取り除くことを望みます。 –

答えて

4

UserDetailsは、ではありません。はセキュリティ上の目的で使用されています。単に「ユーザー情報」です。 Spring SecurityはAuthenticationインスタンスを使用します。だから、Authenticationインスタンスには通常、ユーザーがログインできるようにするための情報(ユーザー名、資格情報、役割、基本的に)だけが必要です。 UserDetailsはより一般的で、ユーザー管理に関連するもの(連絡先情報、アカウント情報、写真など)を含めることができます。

AuthenticationインスタンスにはUserDetailsというインスタンスが付いています。

+0

それはそうですが、Springクラスの中で 'UserDetails#getPassword'のseveralsコールを見つけることができました。私はこれが遺産だと思います。 'UserDetails'クラスは' Authentication'クラスほど一般的ではありません。 –

-1
getAuthorities 

ロールベースのセキュリティに使用されます。 SpringSecurityでは多くの場合便利な機能です。

getCredentials 

プリンシパルが正しい場合に、パスワードまたはハッシュされたパスワードを取得するために使用されます。セキュリティにも必要な方法。

この機能が必要ない場合は、このメソッドを空のメソッドでオーバーライドできます。

+0

私の編集を参照してください。あなたはその質問を理解していませんでした。 –

関連する問題