Nano Hash - криптовалюты, майнинг, программирование

Spring - объект HttpServletRequest null при удалении файла cookie JSESSIONID?

Я тестирую новую функциональность в своем веб-приложении, где я позволяю пользователю оставаться в системе даже после истечения срока действия сеанса просмотра. Для этого у меня есть флажок «Оставаться в системе» на моей странице входа. После успешного входа в систему создается файл 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 создается при первом запуске. Должен ли я как-то проверять это нулевое значение и перенаправлять контроллер обратно к этому методу, если это так?

Спасибо!


  • Я попытался добавить проверку на нуль в объекте HttpServletRequest и перенаправить на / снова, если он нулевой, но произошло то же самое. Я попросил другого человека в моей сети перейти к моему приложению, и он также получает NullPointerException при первом просмотре, обновление страницы работает правильно, поскольку файл cookie создается при первом просмотре. Это означает, что я действительно правильно воспроизвел аннулирование сеанса Spring, удалив файл cookie, и что это действительно проблема. Любая помощь будет оценена по достоинству! 12.03.2018
  • Я также пытался использовать @CookieValue(MDHISStaySignedIn) String cookie в качестве параметра для моего домашнего метода, но он выдает сообщение HTTP Status 400 с жалобой на то, что не может найти файл cookie, если указанного файла cookie нет (чего не будет, если пользователь не решил остаться в системе). Как я могу получить доступ к файлам cookie, используя что-то еще, кроме объекта HttpServletRequest? 12.03.2018

Ответы:


1

Решение состоит в том, чтобы добавить следующий параметр метода:

@CookieValue(value = "MDHISStaySignedIn", defaultValue = "notFound") String cookie

Это присвоит содержимому файла cookie значение, если оно присутствует, и назначит «notFound», если это не так. Таким образом, можно получить доступ к файлам cookie, когда объект запроса имеет значение null!

12.03.2018
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..