2010-11-08 6 views
0

Привет всем я использую следующий метод, чтобы сделать программный вход для пользователя, но с его именем пользователя & паролем, и она отлично работает:Сделать Programmatic логин без имени пользователя/пароля?

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()); 

} 

и мне было интересно, если это возможно сделать программный логин, но без имени пользователя или аутентификации пароля, просто делает этот пользователь аутентифицированным.

ответ

0

удалось сделать это путем удаления этих строк

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

Если вы удалили эти две строки, как была создана следующая строка? . SecurityContextHolder.getContext() setAuthentication (authenticatedUser); –

1

Вы можете создать свой собственный подкласс Authentication, реализовать AuthenticationProvider, который поддерживает его, и настроить диспетчер аутентификации для использования этого провайдера.

(На самом деле, вы можете просто поставить пользовательские Authentication, который всегда возвращает true из isAuthenticated() в SecurityContext, но такой подход обходит AuthenticationManager, так, например, AuthenticationSuccessEvent не будет опубликован).

+0

удалось сделать это путем удаления этих линий token.setDetails (новые WebAuthenticationDetails (запрос)); Аутентификация аутентифицированаUser = authenticationManager .authenticate (токен); –

Смежные вопросы