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

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


但是,这始终返回null。

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

React代码和Javalin运行在不同的服务器上是否导致它不起作用?我尝试将sessionAttribute()替换为cookieStore(),它具有相同的null问题。

编辑-添加显示JSESSIONID的响应信息
java - 标枪 session Attribute()在请求之间不存在-LMLPHP

最佳答案

与Javalin创建者讨论之后,正确的答案是在服务器创建中包括以下内容:

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


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

credentials: "include",

关于java - 标枪 session Attribute()在请求之间不存在,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55187146/

10-13 04:24