Spring Безопасность - автоматический вход в систему без пароля
Я пытаюсь выполнить автоматический вход, когда пользователь щелкает ссылку в своем письме с помощью Spring Безопасность.
Я видел множество примеров для выполнения логического входа в систему следующим образом:
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
try {
Authentication auth = authenticationManager.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(auth);
repository.saveContext(SecurityContextHolder.getContext(), request, response);
rememberMeServices.loginSuccess(request, response, auth);
....
Проблема, которую я вижу, заключается в том, что у меня нет исходного пароля, поэтому я не могу создать UserPasswordAuthenticationToken. Любой другой способ входа в систему пользователя, если у меня нет обычного текстового пароля (у меня есть тот, который закодирован)?
Спасибо заранее.
Ответы
Ответ 1
Будьте осторожны, чтобы вы знали, что вы делаете с точки зрения разрешения входа в систему по электронной почте. SMTP не является безопасным протоколом, поэтому обычно плохо полагаться на кого-то, у которого есть электронное письмо в качестве формы проверки подлинности.
Вам не нужно использовать AuthenticationManager, если вы уже знаете, что они аутентифицированы. Вместо этого вы можете просто установить аутентификацию напрямую, как показано ниже:
Authentication authentication = new UsernamePasswordAuthenticationToken(user, null,
AuthorityUtils.createAuthorityList("ROLE_USER"));
SecurityContextHolder.getContext().setAuthentication(authentication);
Если вам нужен полный пример, вы можете обратиться к SignupController в защищенная почта, которая послужила основой для начала работы с Spring Security 3.1 (презентация в формате InfoQ).