几天来,我一直致力于将 Facebook 与我们的应用程序集成。我已成功建立连接,现在在 Facebook 登录后,我将用户复制到我们的数据库,稍后我想在 context 中使用我们的内部主体。
对于 Spring 安全登录,我们用我们的类实现重载了身份验证管理器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
问题: 我真的不想在所有控制器中区分这些类型。为什么不一样?!当我们使用普通凭据登录时,它显然是一个用户(我的类型)对象,它只是 facebook 的一个字符串。如何更改它,以便 facebook 登录也会在我的安全上下文中为我提供 User 对象?