У меня есть метод, который обрабатывает запрос с URI «/ home». Этот запрос создается при успешной процедуре входа в систему. Вот немного кода, чтобы поддержать мою ситуацию:Spring MVC странное поведение
<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";
Этот бит имеет важное значение, поскольку человек р используется в качестве источника данных для других Запросы.
Теперь проблема. Я не знаю, является ли это собственностью Google Chrome, но по какой-то причине браузер запоминает запрос, который вы выполнили перед входом в систему, и вместо того, чтобы проходить через/home запрос после успешной процедуры входа в систему, он генерирует предыдущий запрос в обход этого/home gate, что приводит к исключению нулевого указателя, поскольку человек p никогда не был настроен, поскольку сеанс не был заполнен/home-запросом.
Я знаю, что для других запросов я должен сделать валидацию, но мне не нравится идея разрешить пользователю генерировать любой запрос без предварительного прохождения/home.
Сделано с текстовым описанием и теперь, чтобы объяснить, как я получаю нежелательное поведение пошагово:
задать для запроса, что вы знаете, существуют такие, как: MYAPP/nameOfSomething/viewThisSomething - вы принесли в протоколирование в странице, как ожидается, (вы должны пройти проверку подлинности для запроса, чтобы быть принятым)
вы вводите правильные учетные данные, и вместо того, чтобы идти по умолчанию-целевой объект URL = «/ домашний» вы автоматически делаете предыдущий запрос MYAPP/nameOfSomething/viewThisSomething без заполнения sessio n с необходимыми данными и результатом является исключение nullpointer.
Что еще интересно, что регистратор показывает почту, так что это может быть, что они оба выполнены одновременно, но/дом запрос медленнее - это может произойти?
Я разрешаю ситуацию другим способом, проверяя, является ли null и вынуждает вернуться в/home, который работает так, как ожидалось, но я контролирую урод и не люблю, когда пользователь делает то, что он не собирается делать.
Благодарим Вас за время,
О, я так плохо разбираюсь в обычае, но в любом случае спасибо, что посмотрю. – Aubergine