Я тестирую новую функциональность в своем веб-приложении, где я позволяю пользователю оставаться в системе даже после истечения срока действия сеанса просмотра. Для этого у меня есть флажок «Оставаться в системе» на моей странице входа. После успешного входа в систему создается файл cookie, содержащий идентификатор пользователя, и процесс входа продолжается в обычном режиме. Первое, что делает первый метод в моем основном контроллере, это проверяет наличие этого файла cookie, считывает в нем идентификатор пользователя, правильно устанавливает объект пользователя в сеансе и обходит процесс входа в систему, переходя непосредственно на домашнюю страницу. Когда пользователь выходит из системы, файл cookie создается заново с нулевым сроком действия, что означает, что он автоматически удаляется.
В настоящее время мои весенние сессии длятся 30 минут. Я успешно протестировал все, но я пытаюсь воспроизвести истечение срока действия сеанса Spring, который избавляется от объекта пользователя в памяти и обычно заставляет пользователя войти в систему. Чтобы воспроизвести его, я удаляю файл cookie JSESSIONID из Chrome. Когда я это делаю, объект HttpServletRequest (на котором я проверяю файлы cookie) имеет значение null.
Вот первый код, который работает в моем основном контроллере:
@RequestMapping(value = {"/"}, method = RequestMethod.GET)
public String home(ModelMap model, HttpServletRequest request)
{
if (session.getAttribute("loggedInUser") != null)
{
return "home";
}
else
{
String userId = null;
for (Cookie cookie : request.getCookies())
{
if (cookie.getName().compareTo("MDHISStaySignedIn") == 0)
{
userId = cookie.getValue();
break;
}
}
if (userId != null)
{
session.setAttribute("loggedInUser", userService.findByUserId(userId));
return "redirect:/";
}
else
{
model.addAttribute("login", new Login());
model.addAttribute("register", new Register());
model.addAttribute("registering", false);
return "login";
}
}
}
Нормально ли, что мой объект запроса имеет значение null при удалении этого файла cookie? Я неправильно воспроизвел время ожидания сеанса Spring, удалив его? Это исключение NullPointerException возникает только при удалении этого файла cookie, и при первом запуске веб-приложения контроллер не выдает исключение, когда файл cookie создается при первом запуске. Должен ли я как-то проверять это нулевое значение и перенаправлять контроллер обратно к этому методу, если это так?
Спасибо!