如何设置 SameSite 属性?
How to set SameSite attribute?
我在设置 Cookie 中的 SameSite 属性时遇到问题。我想设置这个属性,但是 javax.servlet.http.Cookie
和 java.net.HttpCookie
都没有提供处理它的方法。因此,我想创建一个响应 javax.servlet.Filter
来捕获 "Set-Cookie" header 并添加 "SameSite=Strict" 属性。
response.setHeader("Set-Cookie", response.getHeader("Set-Cookie") + "; SameSite=strict");
它工作正常,但当我在一个响应中有多个 "Set-Cookie" header 时出现问题。 javax.servlet.http.HttpServletResponse
不提供删除或覆盖多个具有相同名称的 heder 的方法(迭代它们并使用 setHeader()
不起作用,因为它总是设置最后一个)。您知道如何将 SameSite 属性设置为 cookie 或如何覆盖响应过滤器中的 headers 吗?
提前致谢。
事实证明,使用 setHeader()
方法删除所有以前的同名 headers,所以我只是在 doFilter()
方法中创建简单的 for 循环。它将 SameSite=Strict
属性添加到每个设置的 cookie。
boolean firstHeader = true;
for (String header : cookiesHeaders) {
if (firstHeader) {
httpResponse.setHeader("Set-Cookie",
String.format("%s; %s", header, "SameSite=Strict"));
firstHeader = false;
continue;
}
httpResponse.addHeader("Set-Cookie",
String.format("%s; %s", header, "SameSite=Strict"));
}
在etc/apache2/httpd.conf
Header 编辑 Set-Cookie ^(.*)$ $1;SameSite=严格
对我有用......
新 Tomcat 通过 TomcatContextCustomizer
支持 SameSite cookie。
- 对于 Spring 可以在
@Configuration
中完成启动,参见
- 对于 Tomcat 应用程序 - 在
context.xml
中,参见
我在设置 Cookie 中的 SameSite 属性时遇到问题。我想设置这个属性,但是 javax.servlet.http.Cookie
和 java.net.HttpCookie
都没有提供处理它的方法。因此,我想创建一个响应 javax.servlet.Filter
来捕获 "Set-Cookie" header 并添加 "SameSite=Strict" 属性。
response.setHeader("Set-Cookie", response.getHeader("Set-Cookie") + "; SameSite=strict");
它工作正常,但当我在一个响应中有多个 "Set-Cookie" header 时出现问题。 javax.servlet.http.HttpServletResponse
不提供删除或覆盖多个具有相同名称的 heder 的方法(迭代它们并使用 setHeader()
不起作用,因为它总是设置最后一个)。您知道如何将 SameSite 属性设置为 cookie 或如何覆盖响应过滤器中的 headers 吗?
提前致谢。
事实证明,使用 setHeader()
方法删除所有以前的同名 headers,所以我只是在 doFilter()
方法中创建简单的 for 循环。它将 SameSite=Strict
属性添加到每个设置的 cookie。
boolean firstHeader = true;
for (String header : cookiesHeaders) {
if (firstHeader) {
httpResponse.setHeader("Set-Cookie",
String.format("%s; %s", header, "SameSite=Strict"));
firstHeader = false;
continue;
}
httpResponse.addHeader("Set-Cookie",
String.format("%s; %s", header, "SameSite=Strict"));
}
在etc/apache2/httpd.conf
Header 编辑 Set-Cookie ^(.*)$ $1;SameSite=严格
对我有用......
新 Tomcat 通过 TomcatContextCustomizer
支持 SameSite cookie。
- 对于 Spring 可以在
@Configuration
中完成启动,参见 - 对于 Tomcat 应用程序 - 在
context.xml
中,参见