Javalin sessionAttribute() не сохраняется между запросами

Я настраиваю Javalin как микросервис, предоставляя конечные точки API для своего приложения React. Локально Javalin работает на порту 7070, а React — на 3000 (через встроенный сервер с приложением create-react-app).

Я пытаюсь подключить службы входа/выхода из системы, и в моем контроллере входа в систему у меня есть этот код.

boolean isValid = User.isPasswordValid(u, password);
if (isValid) 
{
    ctx.sessionAttribute("currentUser", u.userHash);
}

В коде React он прослушивает успешный ответ от этого контроллера, а затем перенаправляет на страницу /dashboard. Страница /dashboard загружает данные, и я получаю данные, подходящие для пользователя, получая этот userHash из сеанса следующим образом:

    String userHash = ctx.sessionAttribute("currentUser");

Однако это всегда возвращает ноль.

Похоже, это должно работать и даже соответствует коду руководства, размещенному на веб-сайте Javalin https://javalin.io/tutorials/пример веб-сайта.

Является ли тот факт, что код React и Javalin, работающие на разных серверах, не работают? Я попытался заменить sessionAttribute() на cookieStore(), и у него та же проблема с нулевым значением.

Изменить - добавление информации об ответе, показывающей JSESSIONID Javalin sessionAttribute() не сохраняется между запросами

попробуйте: ctx.sessionAttributeMap(); и перебери через него, посмотри что внутри.

Dylan 15.03.2019 17:51

Это пустая карта

bluedevil2k 15.03.2019 17:59
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
2
2
280
1

Ответы 1

После обсуждения с создателем Javalin правильный ответ — включить эту строку в создание сервера:

app.before(ctx -> ctx.header("Access-Control-Allow-Credentials", "true"));

и убедитесь, что ваш вызов JavaScript включает опцию:

credentials: "include",

Другие вопросы по теме