您知道Java实现允许为cookie设置自定义标志吗,比如SameSite=strict
?javax.servlet.http.Cookie
似乎有一组严格限制的标志可以添加。
发布于 2018-07-02 03:12:52
如果您不想更新所有代码,也可以使用Apache或Nginx配置(或您正在使用的任何其他HTTP服务器/代理)通过一行配置实现相同的配置。
1使用Apache配置设置SameSite cookie
可以将以下行添加到Apache配置中
Header always edit Set-Cookie (.*) "$1; SameSite=Lax"
这将使用SameSite=Lax
标志更新所有cookies。
请参阅这里的更多内容:https://blog.giantgeek.com/?p=1872
2使用Nginx配置设置SameSite cookie
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
发布于 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内部:
<Context>
...
<CookieProcessor sameSiteCookies="none"/>
</Context>
在本例中,使用了处理器的默认实现(org.apache.tomcat.util.http.Rfc6265CookieProcessor
),但您可以在CookieProcessor
属性className
中指定任何其他实现。
发布于 2020-03-01 05:38:43
Jetty服务器版本9.4.26.v20200117
允许在cookie上设置SameSite
属性。我不得不在周围挖点东西,但这很管用。
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
属性。
https://stackoverflow.com/questions/42717210
复制相似问题