在Spring Boot(Spring Web MVC + Tomcat)中的SameSite Cookie

我查找了一下如何在Spring Boot(Spring Web MVC + Tomcat)中使用SameSite Cookie。

同源策略 (SameSite Cookie) 是什么?

请参考MDN文档。

    https://developer.mozilla.org/ja/docs/Web/HTTP/Cookies#SameSite_cookies_experimental_inline

Tomcat对SameSite Cookie的支持

在Tomcat中,我们使用javax.servlet.http.Cookie将Cookie序列化为字符串,并将其写入到HTTP响应中。
序列化过程通过org.apache.tomcat.util.http.CookieProcessor接口进行。
org.apache.tomcat.util.http.Rfc6265CookieProcessor是一个实现类,它提供了setSameSiteCookies方法,可以用来设置SameSite属性。

    https://tomcat.apache.org/tomcat-9.0-doc/config/cookie-processor.html

只需要一种选择,下面是对原文的中文翻译:
要设置一个带有SameSite属性的Rfc6265CookieProcessor,必须将其设置给org.apache.catalina.Context。但是,由于我只是想在Spring Boot中使用它,所以跳过了在Tomcat上进行个性化定制的方法。

使用Spring Boot来自定义CookieProcessor。

在Spring Boot中,您可以准备一个实现了org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer接口的组件,以便自定义Tomcat的Context。

可以在以下实现类中向Cookie添加SameSite属性。

package com.example;

import org.apache.catalina.Context;
import org.apache.tomcat.util.http.Rfc6265CookieProcessor;
import org.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer;
import org.springframework.stereotype.Component;

@Component
public class SameSiteCookieTomcatContextCustomizer implements TomcatContextCustomizer {

    @Override
    public void customize(final Context context) {
        final Rfc6265CookieProcessor cookieProcessor = new Rfc6265CookieProcessor();
        cookieProcessor.setSameSiteCookies("Lax");
        context.setCookieProcessor(cookieProcessor);
    }
}
    完全なコード例 https://github.com/backpaper0/spring-boot-sandbox/tree/master/samesite-cookie-demo

春季会话默认具有SameSite属性。

通过@tokuhirom先生的教导,我了解到使用Spring Session时,默认会添加SameSite属性。

总结

我发现在Spring Boot(Spring Web MVC + Tomcat)中使用SameSite Cookie有两种方法。

Note: It is recommended to always double-check the accuracy of translations with a native speaker.

TomcatContextCustomizerをimplementsしたコンポーネントを用意してContextへカスタマイズしたRfc6265CookieProcessorをセットする
Spring Sessionを使用する

bannerAds