我的应用程序公开了服务的REST API,并使用SpringSecurity来管理私有服务的登录。 通过自定义注册和登录,我不会遇到任何问题,但现在我尝试使用Facebook或Twitter实现登录/注册,而且我不知道如何执行此操作。
有没有人有同样的问题并解决了它?
我尝试使用自定义密码"很长时间"对于每个Facebook和Twitter帐户,但这不起作用。
更新
我尝试了您的解决方案,但收到错误。这是我的代码
public UserDetails loadUserByUsername(String mail) throws UsernameNotFoundException {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
if (ConstantPWCabinet.SOCIAL_LOGIN_FACEBOOK.equalsIgnoreCase(attr.getRequest().getParameter(ConstantPWCabinet.LOGIN_TYPE))) {
User facebookInfo = dao.getFacebookInfo(new FacebookTemplate(attr.getRequest().getParameter(ConstantPWCabinet.FACEBOOK_TOKEN)));
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
authorities.add(new SimpleGrantedAuthority(Role.ROLE_USER_FACEBOOK.toString()));
org.springframework.security.core.userdetails.User user = new org.springframework.security.core.userdetails.User(facebookInfo.getEmail(), null, authorities);
Authentication auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth);
return user;
}
logger.debug("Mail di accesso: " + mail);
User user = dao.getUserSelectedMail(mail);
List<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
String role = user.getRole().toString();
if (StringUtils.isEmpty(role))
authorities.add(new SimpleGrantedAuthority(Role.ROLE_USER.toString()));
else
authorities.add(new SimpleGrantedAuthority(role));
return new org.springframework.security.core.userdetails.User(user.getEmail(), user.getPassword(), authorities);
}
但是我得到了&#34; Bad credential&#34;没有登录。
答案 0 :(得分:2)
j_spring_security_check
当您通过社交媒体进行此操作时,您的用户将通过外部来源进行身份验证,因此您无需在最终验证用户。
你可以简单地做到
//验证用户
UserDetails user = userDetailsService.loadUserByUsername(username);
Authentication auth = new UsernamePasswordAuthenticationToken(user, null, user.getAuthorities());
SecurityContextHolder.getContext().setAuthentication(auth);
这将在没有密码的情况下对用户进行身份验证。