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.
Il a été confirmé que le contenu de cet article fonctionne dans les environnements suivants.
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.
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
$ ./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.
http: // localhost: 8080 /
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. Lorsque la session expire (30 minutes par défaut), l'écran d'erreur passe. Cet état est reproduit par une opération externe.
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)
docker ps
.
Tout d'abord, effacez Redis.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!
http: // localhost: 8080 /
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"
** 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.