2

我将 Javalin 设置为微服务,为我的 React 应用程序提供 API 端点。在本地,Javalin 在端口 7070 上运行,React 在 3000 上运行(通过带有 create-react-app 的内置服务器)。

我正在尝试连接登录/注销服务,在我的登录控制器中我有这个代码。

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

在 React 代码中,它侦听来自此控制器的成功响应,然后重新路由到/dashboard页面。/dashboard页面加载数据,我通过像这样从 Session 中获取 userHash 来获取适合用户的数据:

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

但是,这总是返回 null。

看起来这应该可以工作,甚至与 Javalin 网站https://javalin.io/tutorials/website-example上发布的教程代码相匹配

运行在不同服务器上的 React 代码和 Javalin 是否会导致它无法工作?我尝试用替换sessionAttribute()cookieStore(),它有同样的空问题。

编辑 - 添加显示 JSESSIONID 的响应信息 在此处输入图像描述

4

1 回答 1

2

与 Javalin 创建者讨论后,正确的答案是在服务器创建中包含这一行:

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

并确保您的 JavaScript 调用包含以下选项:

credentials: "include",
于 2019-03-16T14:22:33.903 回答