如何为 javax.servlet.http.Cookie 指定 SameSite 值

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

例如:

import javax.servlet.http.Cookie;

// some code ....


        Cookie cookie = new Cookie(name, value);
        
        cookie.setMaxAge(someValue);

如何为其设置 SameSite 值?

感谢您的帮助。

java cookies servlets
1个回答
0
投票

这只有在 Servlet API 版本 6.0(Jakarta EE 10 的一部分)引入了新的

Cookie#setAttribute()
方法后才有可能实现。

Cookie cookie = new Cookie(name, value);
// ...
cookie.setAttribute("SameSite", "None");

请注意,没有

Cookie#setSameSite()
方法,原因很简单,
SameSite
属性的提案
于 2017 年 8 月 7 日发布,截至今天 仍然 不属于官方 HTTP cookie 规范。这也是为什么花了这么长时间才可以通过 Servlet API 操作
SameSite
属性。 Servlet API 人员基本上都在等待它最终出现在官方规范中。但最终它似乎并没有像预期的那样快地进入最终规范,但谷歌浏览器已经在没有向后兼容性的情况下充分使用它。因此最终引入了一种更通用的方法,并对 Cookie API 的其余部分进行了稍微调整(由您真正发起)。

如果您无法将 servlet 容器升级到至少实现 Servlet API 6.0 版的版本(例如 Tomcat 10.1+、WildFly 27+、GlassFish 7+ 等),那么您必须调整服务器本身的配置和/或其前面的代理。有关详细信息,请参阅其文档。

© www.soinside.com 2019 - 2024. All rights reserved.