将SameSite属性添加到Java中的cookie


(08/01/20 19:45后记)

概述

javax.servlet.http.Cookie没有用于添加SameSite属性的API。
在这种情况下就是一种回应。
顺便说一下,几乎所有浏览器都支持SameSite属性。
参考

使用Set-Cookie标头代替cookie类

我将在Spring boot中尝试它。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
public class DemoController {

    @GetMapping(value = "/")
    public String index(HttpServletResponse response) {

        String name = "name";
        String value = "takeshi";

        String cookie = String.format("%s=%s; max-age=3600; Path=/; HttpOnly; Secure; SameSite=Lax;", name, value);

        response.addHeader("Set-Cookie", cookie);

        return "hello, world!";
    }

Screen Shot 2019-08-06 at 17.11.55.png

Takeshi已安全进入。

弹簧靴

Spring Boot具有一个名为ResponseCookie的类,该类为标头创建一个cookie字符串。
如果使用此类并返回Set-Cookie设置的响应,则将设置cookie。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@RestController
public class DemoController {
    @GetMapping(value = "/")
    public String index(HttpServletRequest request, HttpServletResponse response) {

        String name = "name";
        String value = "takeshi";

        ResponseCookie cookie = ResponseCookie.from(name, value).domain("localhost").maxAge(Duration.ofDays((long) 1))
            .httpOnly(true).secure(true).sameSite("Strict").build();
        response.addHeader("Set-Cookie", cookie.toString());

        return "Hello, World";
    }
}

無題.png

如果您经常编写cookie,那么最好创建一个自定义类来接收和设置参数。
另外,您可以在Web服务器端进行批处理设置,例如Apache或nginx。
参考

参考

类Cookie
https://stackoverflow.com/questions/42717210/samesite-cookie-in-java-application
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Set-Cookie

类响应Cookie