其他分享
首页 > 其他分享> > 使用’in-bean’登录方法时,spring安全上下文中的不同主体

使用’in-bean’登录方法时,spring安全上下文中的不同主体

作者:互联网

几天来,我一直致力于将Facebook与我们的应用程序集成.我已经成功地建立了连接,现在在Facebook登录之后我将用户复制到我们的数据库中,之后我想在上下文中使用我们的内部主体.

对于Spring安全性登录,我们使用我们的类实现UserDetailsS​​ervice重载了我们的authentication-manager.

当有人使用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实际上包含不同的Objects.

对于常规弹簧安全登录其:

org.springframework.security.authentication.UsernamePasswordAuthenticationToken@4527d081:校长:org.springframework.security.core.userdetails.User@586034f:用户名:admin;密码保护];启用:true; AccountNonExpired:true; credentialsNonExpired:true; AccountNonLocked:true;授权机构:ROLE_ADMIN;证书:[保护];认证:真实;详细信息:org.springframework.security.web.authentication.WebAuthenticationDetails@21a2c:RemoteIpAddress:0:0:0:0:0:0:0:1; SessionId:A5E9AB9E4AEE7486EC4B4F6133F77320;授权机构:ROLE_ADMIN

但是在使用控制器中的方法登录之后:
org.springframework.security.authentication.UsernamePasswordAuthenticationToken@cd4699c5:校长:1405308431;证书:[保护];认证:真实;细节:null;授权机构:ROLE_CLIENT

题:
我真的不想在所有控制器中区分这些类型.它为什么不同?!当我们使用普通凭证登录时,它显然是一个用户(我的类型)对象,它只是一个Facebook的字符串.如何更改它,以便facebook登录在我的安全上下文中也会给我User对象?

解决方法:

您需要按照this chapiter结束时的描述设置SignInAdapter.在SignInAdapter.signIn(…)方法中,您可以从DB加载用户对象,然后准备身份验证对象并将其注入安全上下文持有者.

标签:spring,spring-3,spring-security,spring-social
来源: https://codeday.me/bug/20190625/1285371.html