21

私は学んSpring Securityでおり、いくつかの簡単な質問がありUserDetailsServiceます:

1-loadUserByUsername実際に呼び出された、または呼び出されたのはいつですか? 認証後?ログインごとに1回だけですか?

2- ログイン後、Spring は実際にログインしたユーザーを httpSession に入れますか?

3- のコレクションにデータを入力するための推奨される方法はどれ<GrantedAuthority>ですかUserDetails?

  1. イーグルはそれらを取得するので、loadUserByUsername が呼び出されたときに、返されたユーザーには既に "ROLES" があります。
  2. UsernamePasswordAuthenticationFilterログイン成功後の populateのような別のカスタム フィルターを実装しますか?
  3. 上記のいずれでもない…</li>
4

1 に答える 1

16
  1. これは通常AuthenticationProvider、ユーザーを認証するためにインスタンスによって呼び出されます。たとえば、ユーザー名とパスワードが送信さUserdetailsServiceれると、そのユーザーのパスワードが正しいかどうかを確認するために が呼び出されます。また、通常、権限や、ログインしているユーザー (電子メールなど) にアクセスする可能性のあるカスタム フィールドなど、ユーザーに関するその他の情報も提供します。それが主な使用パターンです。コードを grep して、呼び出された場所を正確に確認できます。

マニュアルで説明されているように:

UserDetailsS​​ervice については、しばしば混乱が生じます。これは純粋にユーザー データの DAO であり、そのデータをフレームワーク内の他のコンポーネントに提供する以外の機能は実行しません。特に、AuthenticationManager によって行われるユーザーの認証は行いません。多くの場合、カスタム認証プロセスが必要な場合は、AuthenticationProvider を直接実装する方が理にかなっています。

  1. はい。ユーザーが認証されると、SecurityContextインスタンスがセッションに保存されます。

  2. カスタムを実装する必要がある場合はUserDetailsService、要件とそれらの保存方法によって異なります。通常、他のユーザー情報と同時にロードします。これは、フィルターで行う可能性が高いことではありません。上記のマニュアルからの引用で説明したように、実際に別の認証メカニズムを実装している場合は、AuthenticationProvider直接実装する必要があります。UserDetailsServiceアプリに を含めることは必須ではありません。これは、特定の組み込み機能で使用される戦略と考えることができます。

于 2012-06-01T19:21:34.747 に答える