#java #wicket
Вопрос:
У меня есть приложение для калитки 8.6. В настоящее время при входе в приложение в основном (не всегда бывает) пользователю приходится входить дважды. После первого входа в систему (после ввода учетных данных и нажатия кнопки «Отправить») появляется белая страница с надписью » Если вы видите это, это означает, что как javascript, так и мета-обновление не поддерживаются конфигурацией вашего браузера. Пожалуйста, нажмите на эту ссылку, чтобы продолжить путь к первоначальному месту назначения». Это страница браузера. Через несколько секунд пользователь снова перенаправляется на страницу входа в систему, где он/она должен снова ввести свои учетные данные и нажать кнопку входа. На этот раз пользователь успешно вошел в систему. Мой вопрос в том, как мне предотвратить, чтобы пользователь дважды вводил свои учетные данные.
Из моих исследований я знаю, что это как-то связано со сбором расширенной информации о браузере. В методе инициализации моего класса WicketApplication у меня был следующий код:
getRequestCycleSettings().setGatherExtendedBrowserInfo(true);
Однако я уже прокомментировал этот код несколько месяцев назад. По какой-то причине описанный эффект возникает теперь при каждом новом развертывании. Возможно, причиной этого является недавно добавленный пакет в приложении. Я не знаю. Есть ли возможность предотвратить этот второй вход в систему, возможно, создав специальную информационную страницу боузера, которая перенаправляет вход в систему? Пожалуйста, укажи мне правильное направление. Спасибо.
Комментарии:
1. Я не могу найти ни одного места в источнике Wicket (кроме примеров, включая wicketstuff), устанавливающего этот флаг. Пожалуйста, создайте краткое описание проблемы.
2. Спасибо вам за ваш ответ. Я провел еще некоторое тестирование и не смог воспроизвести его в своей локальной системе (за исключением случаев, когда я установил значение setGatherExtendedBrowserInfo равным true). Это происходит только на сервере и только при первом входе в систему. Таким образом, я не смог воспроизвести его в быстром старте. После некоторых исследований я придумал обходной путь (см. Мой ответ).
Ответ №1:
После некоторых исследований я придумал обходной путь. Возможно, это не очень эффективно, но пока это работает для меня. В моем пользовательском классе сеанса, который наследуется от AuthenticatedWebSession, я добавил следующий код.
@Override
protected WebPage newBrowserInfoPage() {
final Request request = RequestCycle.get().getRequest();
if(request.getUrl().toString().contains("LoginPage")) {
if(!isSignedIn()) {
signIn(username, password);
}
PageParametersEncoder encoder = new PageParametersEncoder();
PageParameters parameters = encoder.decodePageParameters(request.getUrl());
String url = parameters != null amp;amp; parameters.get("originUrl") !=null amp;amp; !parameters.get("originUrl").isNull() amp;amp; !parameters.get("originUrl").isEmpty()?
parameters.get("originUrl").toString("pages/home"):"pages/home";
String finalUrl=url.startsWith("pages/")?url.substring("pages/".length()):url;
throw new RedirectToUrlException(finalUrl);
}
return super.newBrowserInfoPage();
}
Некоторое объяснение кода. Как упоминалось в вопросе, я хочу запретить пользователю входить в систему несколько раз. Таким образом, я проверяю, поступает ли запрос со страницы входа в систему, и выполняю свою работу только в этом случае.
Во время моей реализации я понял, что метод newBrowserInfoPage вызывается в процессе, когда я вызываю session.signIn(username,password);
на моей странице входа в систему. В этом процессе входа в систему вызывается метод аутентификации моего пользовательского сеанса, но флаг signedIn в сеансе AuthenticatedWebSession не изменяется (сохраняет значение false при успешной аутентификации). Это ошибка? Таким образом, мне нужно снова войти в систему, чтобы установить флаг в значение true.
Наконец, я читаю URL-адрес страницы входа в систему, где я сохранил целевой URL-адрес, и перенаправляю пользователя на целевой URL-адрес.
Я понимаю, что это, вероятно, не лучший подход, но это единственное решение, которое я придумал. Если у кого-то есть идея получше, я рад ее услышать.