如何设置SameSite属性?

时间:2018-06-03 17:11:39

标签: java http cookies servlet-filters

我在Cookie中设置SameSite属性时遇到问题。我想设置此属性,但javax.servlet.http.Cookiejava.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或如何覆盖响应过滤器中的标头?

提前致谢。

3 个答案:

答案 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。