J'ai essayé de savoir comment utiliser SameSite Cookie avec Spring Boot (Spring Web MVC + Tomcat).
Consultez la documentation MDN.
Tomcat sérialise javax.servlet.http.Cookie
en une chaîne afin d'écrire le cookie dans la réponse HTTP.
La sérialisation se fait via l'interface ʻorg.apache.tomcat.util.http.CookieProcessor. ʻOrg.apache.tomcat.util.http.Rfc6265CookieProcessor
est fourni comme classe d'implémentation, mais vous pouvez ajouter l'attribut SameSite en utilisant la méthode setSameSiteCookies
de cette classe Rfc6265CookieProcessor
.
L'ensemble Rfc6265CookieProcessor
pour ajouter l'attribut SameSite doit être défini dans ʻorg.apache.catalina.Context`, mais pour le moment, s'il peut être utilisé dans Spring Boot, c'est très bien, nous allons donc ignorer la méthode de personnalisation pour Tomcat seul.
Dans Spring Boot, vous pouvez personnaliser le Context
de Tomcat en fournissant un composant qui implémente l'interface ʻorg.springframework.boot.web.embedded.tomcat.TomcatContextCustomizer`.
Vous pouvez ajouter l'attribut SameSite à un cookie avec la classe d'implémentation suivante.
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);
}
}
--Exemple de code complet https://github.com/backpaper0/spring-boot-sandbox/tree/master/samesite-cookie-demo
Comme @tokuhirom me l'a dit, Lors de l'utilisation de Spring Session, l'attribut SameSite est ajouté par défaut -session-core / src / main / java / org / springframework / session / web / http / DefaultCookieSerializer.java # L88) Il semble.
Nous avons constaté qu'il existe deux façons d'utiliser les cookies SameSite avec Spring Boot (Spring Web MVC + Tomcat):
--Préparez un composant qui implémente «TomcatContextCustomizer» et définissez le «Rfc6265CookieProcessor» personnalisé dans «Context». --Utiliser Spring Session
Recommended Posts