У меня есть метод, который обрабатывает запрос с URI "/ home".Этот запрос генерируется после успешного входа в систему.Вот небольшой код для поддержки моей ситуации:
<security:form-login login-processing-url="/static/j_spring_security_check"
login-page="/login" authentication-failure-url="/login?login_error=t"
default-target-url="/home"/>
Тело метода демонстрирует то, чего я пытаюсь достичь:
String userMail = SecurityContextHolder.getContext().
getAuthentication().getName();
logger.info(userMail);
Person p = userService.retrieveUserByEmail(userMail);
session.setAttribute("person", p);
return "user/home";
Этот бит важен, поскольку человек p используется какисточник данных для других запросов.
Теперь проблема.Я не знаю, является ли это свойством Google Chrome, но по какой-то причине браузер запоминает запрос, который вы сделали перед входом в систему, и вместо того, чтобы выполнить / home запрос после успешной процедуры входа, он генерирует предыдущийзапрос в обход этого / home gate, что приводит к исключению нулевого указателя, так как человек p никогда не был настроен, так как сессия не была заполнена запросом / home.
Я знаю, что для других запросов я должен выполнить проверку, но ямне не нравится идея позволить пользователю генерировать любой запрос без предварительного прохождения / home.
Закончено с текстовым описанием и теперь, чтобы объяснить, как я получаю нежелательное поведение в шагах:
запросить запрос, который, как вы знаете, существует, например: myApp / nameOfSomething / viewThisSomething - вы попадете на страницу входа в систему, как и ожидалось (вы должны пройти проверку подлинности, чтобы запрос был принят)
вы вводите правильные учетные данные и вместо перехода к default-target-url = "/ home" вы автоматически делаете предыдущийequest myApp / nameOfSomething / viewThisSomething без заполнения сеанса необходимыми данными и, как следствие, исключения nullpointer.
Что еще интересно, регистратор показывает почту, поэтому может быть, что они оба выполненыв то же время, но / home запрос медленнее - может ли это произойти?
Я разрешаю ситуацию другим методом, проверяя, имеет ли значение null, и заставляя вернуться в / home, который работает, как и ожидалось, но я не справился с управлениеми не нравится, когда пользователь делает то, что ему не предназначено.
Спасибо за ваше время,