Сделать программный вход без имени пользователя и пароля? - PullRequest
0 голосов
/ 08 ноября 2010

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

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

 }

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

Ответы [ 2 ]

1 голос
/ 08 ноября 2010

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

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

0 голосов
/ 24 ноября 2010

удалось сделать это, удалив эти строки

token.setDetails(new WebAuthenticationDetails(request)); 
Authentication authenticatedUser = authenticationManager .authenticate(token);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...