切断Spring-Session会话

首先

你有没有想过要从外部断开特定的Web应用程序会话?
就像发现了一个危险的家伙!先断开它吧。
而且不需要对Web应用程序进行任何更改…
目标是使用Spring-Session的Web应用程序,将会话保存在Redis中。
那么我考虑的就是简单地从Redis中删除会话信息。
我将尝试一下看能否成功。
如果有更聪明的方法,请指出来,我将不胜感激。

限制事项等

我们已经在以下环境中验证了本文所述内容。

    • java version “11.0.7” 2020-04-14 LTS

 

    • Docker Desktop 2.2.0.5

 

    • Windows 10 + MINGW32(git-bash)

 

    (Macでも動作確認中 多分動くと思います)

准备Redis

准备Redis非常容易使用Docker。我们使用了这个方法创建了一个Redis环境。

$ docker-compose up -d 

所以,我会启动Redis。

当然可以直接在使用的操作系统上安装Redis。

准备Spring-Session应用程序。

如果没有Spring-Session应用程序,就无法进行实验,但是找不到一个好的简单示例应用程序。所以我制作了一个简单的应用程序并放置在下面。

Spring-Session-Sample的运行方式

1. 在下载或克隆的目录中运行该应用程序。

$ ./gradlew bootRun

如果成功连接到Redis的默认端口(6379),并且成功启动。

在XXXX秒内启动了SSSApplication。

2. 访问 http://localhost:8080/

image.png

观察和操作Redis

观察Redis中注册的哪些项目用于管理会话。

    redis-cliの利用
$ docker exec -it [CONTAINER ID] /bin/bash
root@[CONTAINER ID]:/data# redis-cli
127.0.0.1:6379> (ココにコマンド入力)

请在docker ps命令中确认容器ID。
首先清除Redis。

127.0.0.1:6379> flushall

当访问 http://localhost:8080/ 并查看 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"

有三个项目可以确认。
实际上,保持信息的是0b288446-d209-4ecc-bfc4-7adf405e68a7的HttpSession的会话ID。

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

如果删除了上述项目,会话将会失效!

来试试看

请访问http://localhost:8080/

image.png

2. 确认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"

セッション情報を削除

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"

按下[下一個]按鈕試試看

image.png

我已强制断开会话。还剩2个项目。

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

有关于TTL(存续时间)已经设定好了,所以暂时可以放置不管。

广告
将在 10 秒后关闭
bannerAds