数日間、Facebook をアプリケーションに統合する作業を行ってきました。接続が正常に機能し、Facebook ログイン後にユーザーをデータベースにコピーし、後でコンテキスト内で内部プリンシパルを使用したいと考えています。
Spring セキュリティ ログインの場合、authentication-managerをクラス implementing でオーバーロードしUserDetailsService
ました。
誰かが facebook でログインするとき、彼は知ることのできない抽象的な認証情報を持っています。Facebook ログイン コントローラーでこのメソッドを使用して、彼をログインさせました。
Authentication auth = new UsernamePasswordAuthenticationToken(
profile.getId(), new Md5PasswordEncoder().encodePassword(
profile.getEmail() + profile.getId(), null),
(Collection<? extends GrantedAuthority>) getAuthorities(profile.getId()));
問題:
私が使用するいくつかのコントローラ内で
public String profile(Locale locale, Model model, HttpSession session, Principal principal)
実際にはさまざまなオブジェクトが含まれています。principal
通常の春のセキュリティ ログインの場合:
org.springframework.security.authentication.UsernamePasswordAuthenticationToken@4527d081: Principal: org.springframework.security.core.userdetails.User@586034f: Username: admin; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@21a2c: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: A5E9AB9E4AEE7486EC4B4F6133F77320; Granted Authorities: ROLE_ADMIN
ただし、コントローラーのメソッドでログインした後は、次のようになります。
org.springframework.security.authentication.UsernamePasswordAuthenticationToken@cd4699c5: Principal: 1405308431; Credentials: [PROTECTED]; Authenticated: true; Details: null; Granted Authorities: ROLE_CLIENT
質問: すべてのコントローラでこれらのタイプを区別したくありません。なんで違うの!? 通常の資格情報でログインした場合、これは明らかに User (私のタイプ) オブジェクトであり、Facebook の単なる文字列です。FacebookログインでセキュリティコンテキストでもUserオブジェクトが得られるようにするにはどうすればよいですか?