[JAVA] Rompre la session de printemps

introduction

Avez-vous déjà voulu déconnecter une session particulière de votre application Web de l'extérieur? "Mec dangereux trouvé! Déconnectez-vous pour le moment" Comme. De plus, sans toucher à l'application Web ... La cible est une application Web qui utilise Spring-Session et tient la session dans Redis. Puis simplement "Effacer les informations de session de Redis" J'ai pensé. Je vais expérimenter pour voir si cela fonctionne. Si vous connaissez une manière plus intelligente, j'apprécierais que vous puissiez le signaler.

Restrictions, etc.

Il a été confirmé que le contenu de cet article fonctionne dans les environnements suivants.

Préparer Redis

Docker est facile à préparer pour Redis. J'ai utilisé ça. Création d'un environnement redis avec docker-compose

$ docker-compose up -d 

Alors, démarrez Redis.

Préparation des candidatures Spring-Session

Je ne peux pas expérimenter sans l'application Spring-Session, mais je ne trouve pas d'exemple d'application simple. J'ai donc créé une application simple et l'ai placée ci-dessous. Sprint-Session-Sample

Comportement Spring-Session-Sample

1. Exécutez l'application dans le répertoire téléchargé ou cloné

$ ./gradlew bootRun

Si vous vous connectez au port par défaut de Redis (6379) et qu'il démarre avec succès

La chaîne ci-dessus apparaîtra.

2. Accédez à http: // localhost: 8080 /

image.png Entrez une chaîne de caractères dans chaque champ et appuyez sur le bouton [suivant] La chaîne de caractères saisie s'affiche sur l'écran suivant qui hérite de la session. image.png Lorsque la session expire (30 minutes par défaut), l'écran d'erreur passe. image.png Cet état est reproduit par une opération externe.

Observation et fonctionnement de Redis

Observez quels éléments dans Redis sont enregistrés et gérez la session.

--Utilisation de redis-cli

$ docker exec -it [CONTAINER ID] /bin/bash
root@[CONTAINER ID]:/data# redis-cli
127.0.0.1:6379>(Entrez la commande ici)
127.0.0.1:6379> flushall

Si vous accédez à http: // localhost: 8080 / et cochez Redis ...

127.0.0.1:6379> keys *
1) "spring:session:sessions:0b288446-d209-4ecc-bfc4-7adf405e68a7"
2) "spring:session:sessions:expires:0b288446-d209-4ecc-bfc4-7adf405e68a7"
3) "spring:session:expirations:1604421420000"

Vous pouvez voir 3 éléments. 0b288446-d209-4ecc-bfc4-7adf405e68a7 est l'ID de session de HttpSession, et les informations sont en fait conservées.

1) "spring:session:sessions:0b288446-d209-4ecc-bfc4-7adf405e68a7"`

Cela ressemble à l'élément ci-dessus. Si vous supprimez cela, la session devrait expirer!

essayons

1. Accédez à http: // localhost: 8080 /

image.png

2. Confirmation Redis et suppression de session

127.0.0.1:6379> keys *
1) "spring:session:sessions:0b288446-d209-4ecc-bfc4-7adf405e68a7"
2) "spring:session:sessions:expires:0b288446-d209-4ecc-bfc4-7adf405e68a7"
3) "spring:session:expirations:1604421420000"

Supprimer les informations de session

127.0.0.1:6379> del spring:session:sessions:0b288446-d209-4ecc-bfc4-7adf405e68a7 
(integer) 1
127.0.0.1:6379> keys *
1) "spring:session:sessions:expires:0b288446-d209-4ecc-bfc4-7adf405e68a7"
2) "spring:session:expirations:1604421420000"

3. Essayez d'appuyer sur le bouton [suivant]

image.png

** Vous avez pu déconnecter de force la session. ** ** 2 articles restants

127.0.0.1:6379> keys *
1) "spring:session:sessions:expires:0b288446-d209-4ecc-bfc4-7adf405e68a7"
2) "spring:session:expirations:1604421420000"

Puisque la TTL (date d'expiration) est définie pour, vous pouvez la laisser pour le moment.

Recommended Posts

Rompre la session de printemps
Brisez la table japonaise avec MyBatis
Casser une longue syntaxe mince au milieu