У меня есть два UsernamePasswordForm
класса как authenticators
SampleUsernamePasswordForm
и SecurityUsernamePasswordForm
Если SampleUsernamePasswordForm выполнен успешно, нет необходимости переходить к SecurityUsernamePasswordForm
, но если есть какая-либо ошибка учетных данных, я хочу обойти аутентификатор SampleUsernamePasswordForm
и перейти к SecurityUsernamePasswordForm
Оба находятся под ALTERNATIVE
прямо сейчас, что означает, что если один из них сбой, он должен перейти к следующему.
В SampleUsernamePasswordForm
я пытался
if (!validateForm(context, formData)) {
Response challengeResponse = challenge(context, getDefaultChallengeMessage(context), FIELD_PASSWORD);
context.failureChallenge(AuthenticationFlowError.INVALID_CREDENTIALS, challengeResponse);
}
и
if (!validateForm(context, formData)) {
context.failure(AuthenticationFlowError.INVALID_CREDENTIALS);
}
Я думал, что вызов context.failure вызовет SecurityUsernamePasswordForm
, но он просто показывает сообщение об ошибке в той же форме входа.
В настоящее время мне пришлось прибегнуть к тому, где я должен был разместить вход из SecurityUsernamePasswordForm
в SampleUsernamePasswordForm
, что выглядит неаккуратно. Как перейти к SecurityUsernamePasswordForm
?
Кроме того, по какой-то причине объект SampleUsernamePasswordForm
создается 3-5 раз, прежде чем будет вызван authenticate
, может ли это произойти с аутентификаторами?
Если оба исполнения являются АЛЬТЕРНАТИВНЫМИ, вы бы просто назвали попытку
на SampleUsernamePasswordForm, чтобы просто перейти к следующему выполнению (SecurityUsernamePasswordForm). Но просто убедитесь, что по крайней мере один сбой или успех должен быть возвращен в конце потока.