2010-11-08 11 views
0

Bonjour tous J'utilise la méthode suivante pour faire connexion programmatique pour l'utilisateur, mais avec son nom d'utilisateur & mot de passe, et il fonctionne très bien:Faire un login programmatique sans nom d'utilisateur/mot de passe?

public static void autoLogin(User user, HttpServletRequest request, 
    AuthenticationManager authenticationManager) { 

    GrantedAuthority[] grantedAuthorities = new GrantedAuthority[] { new GrantedAuthorityImpl(
    user.getAuthority()) }; 

    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
    user.getUserName(), user.getPassword(), 
    grantedAuthorities); 

    // generate session if one doesn't exist 
    request.getSession(); 

    token.setDetails(new WebAuthenticationDetails(request)); 
    Authentication authenticatedUser = authenticationManager 
    .authenticate(token); 

    SecurityContextHolder.getContext().setAuthentication(authenticatedUser); 
    // setting role to the session 
    request 
    .getSession() 
    .setAttribute(
     HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY, 
     SecurityContextHolder.getContext()); 

} 

et je me demandais s'il est possible de faire connexion programmatique mais sans le nom d'utilisateur ou l'authentification par mot de passe, rend simplement cet utilisateur authentifié.

Répondre

0

a réussi à le faire en supprimant les lignes

token.setDetails(new WebAuthenticationDetails(request)); 
Authentication authenticatedUser = authenticationManager .authenticate(token); 
+1

Si vous avez supprimé ces deux lignes, comment la ligne suivante a-t-elle été compilée? SecurityContextHolder.getContext(). SetAuthentication (authenticatedUser); –

1

Vous pouvez créer votre propre sous-classe de Authentication, implémenter un AuthenticationProvider qui la prend en charge et configurer le gestionnaire d'authentification pour utiliser ce fournisseur.

(En fait, vous pouvez simplement mettre une coutume Authentication qui retourne toujours true de isAuthenticated() dans SecurityContext, mais cette approche court-circuite AuthenticationManager, donc, par exemple, AuthenticationSuccessEvent ne serait pas publié).

+0

a réussi à le faire en supprimant les lignes token.setDetails (nouveaux WebAuthenticationDetails (demande)); Authentification authenticatedUser = authenticationManager .authenticate (token); –