Jetty - httponly cookie 未保存在嵌入式码头 11 中的浏览器中

Jetty - httponly cookie not being saved in browser in embedded jetty 11

在我的网络应用程序中,我以这种方式设置响应 cookie:

Cookie testCookie = new Cookie("test", "mycookie");
testCookie.setHttpOnly(true);
testCookie.setPath("/");
testCookie.setMaxAge(3600);
testCookie.setSecure(true);

response.addCookie(testCookie); // Response is of type HttpServletResponse

执行请求的客户端在本地主机中是 运行。

当我查看 chrome 中的请求时,我看到该 cookie 选项卡并看到该 cookie 已收到,但当我查看应用程序-> 时,我在 chrome 中找不到该 cookie Cookie 选项卡和我在此完成后执行的其他请求,请勿发送 cookie。

此外,在码头 11 中,我似乎无法设置 cookie 的 SameSite 属性。

我如何设置此 cookie?httpOnly cookie 在 chrome 的“应用程序”选项卡中不可见是否正常?我如何验证它是否已设置?

编辑: 其他详细信息 我是 运行 https://localhost 中的客户端,服务器使用带有自签名证书的 https。 从响应中我收到的 cookie 似乎是正确的,但 chrome 似乎没有保存它。

我们的经验是 Chrome 将 reject/drop 任何 Set-Cookie 没有 SameSite 值集。

Jetty 11 中的行为...

  • jakarta.servlet.http.Cookie 没有 setters/getters 的“SameSite”(这是下一个 Servlet API 版本的特性)。
  • 默认情况下,ServletContext 属性 org.eclipse.jetty.cookie.sameSiteDefault 包含 SameSite cookie 属性的默认值。 (使用值 NoneStrictLax 之一)。如果未设置此属性,您的 cookie 将不会提供 SameSite 值。
  • 您可以在 Jetty 中使用 cookie 注释配置 SameSiteHttpOnly 以控制特定的 Cookie SameSite 行为。

示例:

Cookie testCookie = new Cookie("test", "mycookie");
testCookie.setHttpOnly(true);
testCookie.setPath("/");
testCookie.setMaxAge(3600);
testCookie.setSecure(true);
testCookie.setComment("__SAME_SITE_LAX__");
// This can be __SAME_SITE_NONE__, or __SAME_SITE_STRICT__, or __SAME_SITE_LAX__

response.addCookie(testCookie);

在您的浏览器中评估这些更改时,首先确认 Set-Cookie 响应 header 是您想要的,然后查看应用程序选项卡。

请注意,Chrome 对 IP 地址、单标签域和保留主机名(如“test”或“localhost”等)的域名有大量特殊规则。这些对于TLS/SSL、SameSite、COR、Preflight 请求等。在测试时避免使用其中任何一种,尽可能使用完全限定的主机名,否则您会对这些规则感到惊讶。