1

Durch die Aufnahme der Spring-sozialen Anmeldung/Anmeldung zu meinem aktuellen Spring-Boot-Projekt, durch die Umsetzung der Klassen ConnectionSignUp und SignInAdapter, die Anwendung, nach der Genehmigung mit dem sozialen Netzwerk Website, erfordert es die Implementierung eines Mappings für "/ Anmeldung" in meinem Controller. Bei dieser Methode mache ich grundsätzlich das gleiche was ich bereits bei der ConectionSignUp-Methode implementiert habe. Wer weiß, was ich tun kann, um diese Doppelzüngigkeit zu vermeiden, und die Anwendung auf meine Klasse ConnectionSignUp statt eine zusätzliche Methode auf meinem Controller zu richten?Implementierung für implizite soziale Anmeldung im Frühjahr-Boot-Projekt

meine Implementierung bisher die folgenden Klassen umfasst:

ConnectionSIgnUp

@Component 
public class CustomConnectionSignUp implements ConnectionSignUp { 
    @Autowired 
    private UsuarioDao account; 

    @Autowired 
    private JavaMailSender mailSender; 

    public String execute(Connection<?> connection) { 
    UserProfile profile = connection.fetchUserProfile(); 

    String user; 
    try { 
     Usuario novo = new Usuario(profile.getUsername(),UUID.randomUUID().toString().replaceAll("-", ""),null,null,false,true); 
     account.insert(novo); 
     return novo.getLogin(); 
    } catch (Exception e) { 
     return null; 
    } 
    } 
} 

SignInAdapter

@Component 
public class CustomSignInAdapter implements SignInAdapter { 
    @Autowired 
    private SocialUserDetailsService socialUserDetailsService; 

    public String signIn(String userId, Connection<?> connection, NativeWebRequest request) { 
    SocialUserDetails user = socialUserDetailsService.loadUserByUserId(userId); 
    if(user != null) 
     SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(user.getUserId(), null, null)); 
    return null; 
    } 
} 

SocialUserDetailsService

@Service 

    public class CustomSocialUserDetailsService implements SocialUserDetailsService { 
     @Autowired 
     private UsuarioDao account; 

     public SocialUserDetails loadUserByUserId(String userId) { 
     for(Usuario usuario : account.select()) 
      if(usuario.getLogin().equals(userId)) 
      return new SocialUser(usuario.getLogin(), usuario.getSenha(), usuario.isEnabled(), usuario.isAccountNonExpired(), usuario.isCredentialsNonExpired(), usuario.isAccountNonLocked(), usuario.getAuthorities()); 
     return null; 
     } 
    } 

application.properties

# SPRING SOCIAL (SocialWebAutoConfiguration) 
spring.social.auto-connection-views=false 

# SPRING SOCIAL FACEBOOK (FacebookAutoConfiguration) 
spring.social.facebook.app-id=... 
spring.social.facebook.app-secret=... 

# SPRING SOCIAL TWITTER (TwitterAutoConfiguration) 
spring.social.twitter.app-id=... 
spring.social.twitter.app-secret=... 

Antwort

1

Es scheint mir, dass Sie nicht InjectConnectionSignUp in UsersConnectionRepository tat. Daher versucht Spring, den Benutzer auf die Seite mit dem Anmeldeformular umzuleiten. Um eine implizite Anmeldung durchzuführen, versuchen Sie, Ihre ConnectionSignUp Bean an setConnectionSignUp() zu übergeben.

Verwandte Themen