У меня есть приложение, которое использует Spring-Security.В моем процессе регистрации новый пользовательский объект сохраняется с паролем HASHED, электронное письмо, содержащее токен активации, отправляется пользователю.Щелчок по этому токену направляет пользователя к UserActivationServlet, который ищет пользователя по токену, активирует пользователя и перенаправляет его в приложение.Я хотел бы автоматически войти в приложение пользователя и включить этот метод в свой сервлет, чтобы сделать это
private void authenticateUserAndSetSession(HttpServletRequest request, User u) {
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(
u.getUsername(), u.getPassword()); //PROBLEM: THIS PASSWORD IS HASHED
// generate session if one doesn't exist
request.getSession();
token.setDetails(new WebAuthenticationDetails(request));
Authentication authenticatedUser = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(authenticatedUser);
request.getSession().setAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY,
SecurityContextHolder.getContext());
}
Проблема здесь в том, что поле пароля на объекте пользователя было хэшировано, когда оно былосоздано.Таким образом, единственный другой вариант, который я могу придумать, - это передать хэш-пароль в качестве параметра запроса сервлету (неприятно!)
Я что-то пропустил, есть ли другой способ предварительной аутентификации пользователя?
Спасибо