Javelin会话Attribute()不是在请求之间保持

问题描述 投票:2回答:1

我将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页面加载数据,我通过将SessionHash从会话中取出来获取适合用户的数据,如下所示:

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

但是,这总是返回null。

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

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

编辑 - 添加显示JSESSIONID enter image description here的响应信息

java reactjs spark-java javalin
1个回答
1
投票

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

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

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

credentials: "include",
© www.soinside.com 2019 - 2024. All rights reserved.