Подтвердить что ты не робот

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. Любой другой способ входа в систему пользователя, если у меня нет обычного текстового пароля (у меня есть тот, который закодирован)?

Спасибо заранее.

4b9b3361

Ответ 1

Будьте осторожны, чтобы вы знали, что вы делаете с точки зрения разрешения входа в систему по электронной почте. SMTP не является безопасным протоколом, поэтому обычно плохо полагаться на кого-то, у которого есть электронное письмо в качестве формы проверки подлинности.

Вам не нужно использовать AuthenticationManager, если вы уже знаете, что они аутентифицированы. Вместо этого вы можете просто установить аутентификацию напрямую, как показано ниже:

Authentication authentication = new UsernamePasswordAuthenticationToken(user, null,
    AuthorityUtils.createAuthorityList("ROLE_USER"));
SecurityContextHolder.getContext().setAuthentication(authentication);

Если вам нужен полный пример, вы можете обратиться к SignupController в защищенная почта, которая послужила основой для начала работы с Spring Security 3.1 (презентация в формате InfoQ).