首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Java应用程序中的SameSite cookie

Java应用程序中的SameSite cookie
EN

Stack Overflow用户
提问于 2017-03-10 11:23:49
回答 9查看 80.9K关注 0票数 75

您知道Java实现允许为cookie设置自定义标志吗,比如SameSite=strictjavax.servlet.http.Cookie似乎有一组严格限制的标志可以添加。

EN

回答 9

Stack Overflow用户

发布于 2018-07-02 03:12:52

如果您不想更新所有代码,也可以使用Apache或Nginx配置(或您正在使用的任何其他HTTP服务器/代理)通过一行配置实现相同的配置。

1使用Apache配置设置SameSite cookie

可以将以下行添加到Apache配置中

代码语言:javascript
运行
复制
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"

这将使用SameSite=Lax标志更新所有cookies。

请参阅这里的更多内容:https://blog.giantgeek.com/?p=1872

2使用Nginx配置设置SameSite cookie

代码语言:javascript
运行
复制
location / {
    # your usual config ...
    # hack, set all cookies to secure, httponly and samesite (strict or lax)
    proxy_cookie_path / "/; secure; HttpOnly; SameSite=strict";
}

与此相同,这也将使用SameSite=Lax标志更新所有cookies

请参阅这里的更多内容:https://serverfault.com/questions/849888/add-samesite-to-cookies-using-nginx-as-reverse-proxy

票数 13
EN

Stack Overflow用户

发布于 2020-01-24 08:03:22

从今天(24.01.20)起,servlet-api不允许将sameSite属性设置为cookie。顺便说一下,还有一个正在进行的票证(链接),它将发布一个新的(5.0或5.1 servlet-api)。

选项1:您不必着急,可以等待servlet-api版本,其中Cookie类和SessionCookieConfig类有专门的方法来设置sameSite属性。

选项2: --您使用的是servlet-api的旧版本(例如3.1),因此使用的是Tomcat的旧版本(例如,我现在有当前的情况)。这意味着,即使社区发布了带有servlet-api支持的sameSite,也不能立即更新您的版本,因为更新两个主要版本的风险太大。

在这种情况下,我们找到了解决办法。

在Tomcat中有一个Cookie Processor Component链接,它

CookieProcessor元素表示将接收到的cookie标头解析为可通过HttpServletRequest.getCookies()访问的javax.servlet.http.Cookie对象的组件,并将通过HttpServletResponse.addCookie()添加到响应中的javax.servlet.http.Cookie对象转换为返回给客户端的headers。

这个处理器的使用相当直接。在context.xml内部:

代码语言:javascript
运行
复制
<Context>
    ...
    <CookieProcessor sameSiteCookies="none"/>
</Context>

在本例中,使用了处理器的默认实现(org.apache.tomcat.util.http.Rfc6265CookieProcessor),但您可以在CookieProcessor属性className中指定任何其他实现。

票数 11
EN

Stack Overflow用户

发布于 2020-03-01 05:38:43

Jetty服务器版本9.4.26.v20200117允许在cookie上设置SameSite属性。我不得不在周围挖点东西,但这很管用。

代码语言:javascript
运行
复制
import static org.eclipse.jetty.http.HttpCookie.SAME_SITE_STRICT_COMMENT;

...

Cookie cookie = new Cookie("my-cookie", "some-value");
cookie.setMaxAge(120); // age in seconds
cookie.setSecure(true);
cookie.setHttpOnly(true);
cookie.setComment(SAME_SITE_STRICT_COMMENT);

response.addCookie(cookie);

jetty的addCookie()对象上的Response方法检查注释以添加SameSite属性。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42717210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档