Skip to content

Commit 9d96b5d

Browse files
author
litongjava
committed
optimize save access token to redis
1 parent 2d7d267 commit 9d96b5d

File tree

1 file changed

+69
-26
lines changed

1 file changed

+69
-26
lines changed

docs/zh/08_token/02.md

+69-26
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
# 整合 Sa-Token
22

3-
### 概述
3+
## 概述
44

55
Tio-Boot 已经内了内置对 Sa-Token 支持 ,提供了一种有效的方式来处理身份验证和授权。虽然 Tio-Boot 已有内置支持,但仍需手动添加 `sa-token-core` 依赖。此外,若希望将 token 存储在 Redis 中,还需要添加 `jfinal-plugins``jedis``fst` 依赖。
66

7-
### 使用 Sa-Token 实现登录功能
7+
## 使用 Sa-Token 实现登录功能
8+
9+
### 存储 token 到浏览器
810

911
#### 添加依赖
1012

@@ -17,38 +19,15 @@ Tio-Boot 已经内了内置对 Sa-Token 支持 ,提供了一种有效的方式
1719
<artifactId>sa-token-core</artifactId>
1820
<version>1.37.0</version>
1921
</dependency>
20-
21-
<!-- JFinal 插件,用于与 Redis 交互 -->
22-
<dependency>
23-
<groupId>com.litongjava</groupId>
24-
<artifactId>jfinal-plugins</artifactId>
25-
<version>1.0.6</version>
26-
</dependency>
27-
28-
<!-- Jedis,Redis 的 Java 客户端 -->
29-
<dependency>
30-
<groupId>redis.clients</groupId>
31-
<artifactId>jedis</artifactId>
32-
<version>3.6.3</version>
33-
</dependency>
34-
35-
<!-- FST 序列化工具,用于对象和字节流间的转换 -->
36-
<dependency>
37-
<groupId>de.ruedigermoeller</groupId>
38-
<artifactId>fst</artifactId>
39-
<version>2.57</version> <!-- 注意:更高版本不支持 JDK 8 -->
40-
</dependency>
4122
```
4223

4324
#### 配置 Sa-Token
4425

4526
接下来,需要设置 Sa-Token 的配置类。此类负责初始化 Sa-Token 相关的配置,如 token 的存储方式、有效期、cookie 配置等。
4627

4728
```java
48-
// 导入必要的类和注解
4929
import com.litongjava.jfinal.aop.annotation.AConfiguration;
5030
import com.litongjava.jfinal.aop.annotation.AInitialization;
51-
import com.litongjava.jfinal.plugin.satoken.SaTokenDaoRedis;
5231
import com.litongjava.tio.boot.satoken.SaTokenContextForTio;
5332
import cn.dev33.satoken.SaManager;
5433
import cn.dev33.satoken.config.SaCookieConfig;
@@ -191,8 +170,71 @@ public class IndexController {
191170
- 验证 Token:`http://localhost:8080/auth/validateToken`
192171
- 访问首页:`http://localhost:8080/`
193172

173+
##### 登录
174+
175+
登录成功会回返回下面的信息
176+
请求头
177+
178+
```
179+
token:c5edff10712b4c49b64da5b910ecdb53
180+
```
181+
182+
or
183+
184+
```
185+
Set-Cookie:token=c5edff10712b4c49b64da5b910ecdb53; Max-Age=2592000; Expires=Tue, 9 Apr 2024 23:07:50 -1000; Path=/; HttpOnly
186+
```
187+
188+
上面两种方式使用任意一种方式进行验证都可以
189+
190+
##### 验证
191+
192+
可以添加使用 cookie token=c5edff10712b4c49b64da5b910ecdb53
193+
194+
```
195+
GET /auth/validateToken HTTP/1.1
196+
Cookie: token=c5edff10712b4c49b64da5b910ecdb53; PHPSESSID=e11a6f19b3504fec816a3d07862341ec
197+
```
198+
199+
也支持请求头参数 token
200+
194201
### 将 Token 存入 Redis
195202

203+
#### 为什么要将访问 token 存入 Redis
204+
205+
将访问令牌(Token)存储在 Redis 中主要是出于以下原因:
206+
207+
- 易于管理过期时间: 访问令牌通常有一个有效期限。Redis 提供了设置键值对过期时间的功能,这使得管理令牌过期变得简单和自动化,过期的令牌会被自动从数据库中删除,从而节省存储空间。
208+
209+
- 支持分布式系统: 在微服务架构或分布式系统中,应用组件可能部署在不同的服务器或容器上。使用 Redis 存储访问令牌可以确保所有组件都能实时访问到最新的令牌信息,便于系统的扩展和维护。
210+
211+
- 可伸缩性: 即便后端服务器重启,因为 token 存储到 redis 中,重启后依然可以识别前端传递过来的 token
212+
213+
#### 添加依赖
214+
215+
```xml
216+
<!-- JFinal 插件,用于与 Redis 交互 -->
217+
<dependency>
218+
<groupId>com.litongjava</groupId>
219+
<artifactId>jfinal-plugins</artifactId>
220+
<version>1.0.6</version>
221+
</dependency>
222+
223+
<!-- Jedis,Redis 的 Java 客户端 -->
224+
<dependency>
225+
<groupId>redis.clients</groupId>
226+
<artifactId>jedis</artifactId>
227+
<version>3.6.3</version>
228+
</dependency>
229+
230+
<!-- FST 序列化工具,用于对象和字节流间的转换 -->
231+
<dependency>
232+
<groupId>de.ruedigermoeller</groupId>
233+
<artifactId>fst</artifactId>
234+
<version>2.57</version> <!-- 注意:更高版本不支持 JDK 8 -->
235+
</dependency>
236+
```
237+
196238
为了将 token 存储在 Redis 中,需要配置 Redis 连接,并让 Sa-Token 使用 Redis 来存储 token。
197239

198240
#### 配置 Redis 连接
@@ -231,13 +273,14 @@ public class RedisPluginConfig {
231273
然后,在 Sa-Token 的配置中指定使用 Redis 来存储 token。
232274

233275
```java
276+
import com.litongjava.jfinal.plugin.satoken.SaTokenDaoRedis;
234277
// 在 Sa-Token 配置类中添加
235278
SaManager.setSaTokenDao(new SaTokenDaoRedis("main"));
236279
```
237280

238281
通过这种方式,Sa-Token 将使用 Redis 作为 token 的存储介质,提高了应用的可伸缩性和性能。
239282

240-
#### 总结
283+
### 总结
241284

242285
整合 Sa-Token 到并使用 Redis 作为存储,为应用提供了一种强大且灵活的方式来处理用户认证和会话管理。通过上述步骤,您可以轻松地在 Tio-Boot 项目中实现基于 token 的身份验证系统,并利用 Redis 的高性能和持久化特性来管理这些 token。
243286

0 commit comments

Comments
 (0)