Вот моя реализация. Идея заимствована из класса org.jasig.cas.web.flow.AuthenticationViaFormAction.
В моем веб-контроллере обрабатывается запрос на разблокировку, который часто поступает из регистрационного письма нового пользователя.
String oneTimeAuthToken = this.userManager.generateOneTimeAuthToken(userEmail);
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials();
credentials.setUsername(userEmail);
credentials.setPassword(oneTimeAuthToken);
String tgt = centralAuthenticationService.createTicketGrantingTicket(credentials);
ticketGrantingTicketCookieGenerator.addCookie(request, response, tgt);
log.debug("Current user was unlocked and logged in.");
Основой этого является создание временного токена, подобного паролю, для аутентификации. Конечно, userManager должен очищать этот токен автоматически после успешной аутентификации.
Надеюсь, это понятно. Дайте мне знать, если вы заметили что-то не так.