[JAVA] Cookie SameSite dans Spring Boot (Spring Web MVC + Tomcat)

J'ai essayé de savoir comment utiliser SameSite Cookie avec Spring Boot (Spring Web MVC + Tomcat).

Qu'est-ce que le cookie SameSite?

Consultez la documentation MDN.

Prise en charge des cookies Tomcat SameSite

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.

Personnaliser le processeur de cookies avec Spring Boot

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

Spring Session a l'attribut SameSite par défaut

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.

Résumé

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

Cookie SameSite dans Spring Boot (Spring Web MVC + Tomcat)
Testez le contrôleur avec Mock MVC dans Spring Boot
Définir le paramètre contextuel dans Spring Boot
Multi-projets Spring Boot 2 avec Gradle
[Spring Boot] Création d'applications Web
Changements majeurs dans Spring Boot 1.5
NoHttpResponseException dans Spring Boot + WireMock
Exemple d'application Web qui gère plusieurs bases de données avec Spring Boot 1.5
Spring Boot Hello World dans Eclipse
Développement d'applications Spring Boot dans Eclipse
Écrire du code de test avec Spring Boot
Implémenter l'API REST avec Spring Boot
Qu'est-ce que @Autowired dans Spring Boot?
Implémenter l'application Spring Boot dans Gradle
Comment utiliser Thymeleaf avec Spring Boot
Spring Boot 2.0.0 ne démarre pas le Tomcat intégré
Lancer un (ancien) projet Spring Boot avec IntelliJ
Créer une image Spring Boot + Docker avec Gradle
Priorité d'accès aux fichiers statiques dans Spring Boot
Sortie du journal Spring Boot au format json
Mémorandum de téléchargement de fichier local avec Spring Boot
Créer un projet Java Spring Boot avec IntelliJ
Desserrer la vérification de la syntaxe de Thymeleaf dans Spring Boot
Déployer automatiquement des applications Web développées en Java à l'aide de Jenkins [Spring Boot App Edition]
Démarrez le développement d'applications Web avec Spring Boot
WAR l'application WEB par Spring Boot et la déployer sur le serveur Tomcat
[Entraine toi! ] Affichez Hello World avec Spring Boot
Fonctionnement du servlet Dispatcher dans Spring MVC
Utiliser la méthode de requête DynamoDB avec Spring Boot
Essayez Spring Boot 1 (Construction de l'environnement ~ Démarrage de Tomcat)
DI SessionScope Bean dans le filtre Spring Boot 2
Modifier le délai d'expiration de la session dans Spring Boot
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Ajouter l'attribut SameSite au cookie en Java
Connectez-vous aux applications Web Spring Boot sur la plate-forme Microsoft ID
Modifications majeures liées à Spring Framework 5.0 Web MVC
Traitement asynchrone avec exécution régulière dans Spring Boot
Exécuter un projet Spring Boot avec VS Code
Sortie des journaux de demande et de réponse avec Spring Boot
Utiliser le filtre de servlet avec Spring Boot [compatible Spring Boot 1.x, 2.x]
Comment ajouter un chemin de classe dans Spring Boot
Conseils Java - Créez un projet Spring Boot avec Gradle
Comment se lier avec un fichier de propriétés dans Spring Boot
Le nom officiel de Spring MVC est Spring Web MVC
Créer un serveur API Web avec Spring Boot
Annotations utilisées dans les outils de gestion des tâches Spring Boot
Afficher la tâche Gradle dans le projet Spring Boot
Défi Spring Boot
MVC dans Eclipse.
Forme de botte de printemps
Spring Boot Rappelez-vous
gae + botte à ressort
Mémorandum (Spring Web)
Spécifiez le codage des ressources statiques dans Spring Boot
Inclure le pot externe dans le package avec Spring boot2 + Maven3
Intégration Tomcat, Apache et WebSocket intégrée à l'application Spring Boot
Veuillez noter que Spring Boot + Tomcat 8.5.8 ne peut pas être utilisé!
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
Mémo d'utilisation de Spring Security: coopération avec Spring MVC et Boot
Comment créer un projet Spring Boot dans IntelliJ
SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x