我在Cookie中设置SameSite属性时遇到问题。我想设置此属性,但javax.servlet.http.Cookie
和java.net.HttpCookie
都没有提供处理它的方法。因此,我有一个想法是创建一个响应javax.servlet.Filter
来捕获" Set-Cookie"标题并添加" SameSite =严格"属性。
response.setHeader("Set-Cookie", response.getHeader("Set-Cookie") + "; SameSite=strict");
它工作正常,但当我有多个" Set-Cookie"一个回复中的标题。 javax.servlet.http.HttpServletResponse
没有提供删除或覆盖多个具有相同名称的heder的方法(迭代它们并使用setHeader()
不起作用,因为它始终设置最后一个)。您是否知道如何将SameSite属性设置为cookie或如何覆盖响应过滤器中的标头?
提前致谢。
答案 0 :(得分:2)
事实证明,使用setHeader()
方法删除所有以前具有相同名称的标头,因此我只需在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"));
}
答案 1 :(得分:1)
在etc / apache2 / httpd.conf
中标题编辑Set-Cookie ^(。*)$ $ 1; SameSite = Strict
为我工作.....
答案 2 :(得分:1)
新的Tomcat通过TomcatContextCustomizer
支持SameSite cookie。
@Configuration
中完成Spring Boot的启动,请参见https://stackoverflow.com/a/60860531/548473 context.xml
中,请参见https://stackoverflow.com/a/57622508/548473