1
1
# 整合 Sa-Token
2
2
3
- ### 概述
3
+ ## 概述
4
4
5
5
Tio-Boot 已经内了内置对 Sa-Token 支持 ,提供了一种有效的方式来处理身份验证和授权。虽然 Tio-Boot 已有内置支持,但仍需手动添加 ` sa-token-core ` 依赖。此外,若希望将 token 存储在 Redis 中,还需要添加 ` jfinal-plugins ` 、` jedis ` 和 ` fst ` 依赖。
6
6
7
- ### 使用 Sa-Token 实现登录功能
7
+ ## 使用 Sa-Token 实现登录功能
8
+
9
+ ### 存储 token 到浏览器
8
10
9
11
#### 添加依赖
10
12
@@ -17,38 +19,15 @@ Tio-Boot 已经内了内置对 Sa-Token 支持 ,提供了一种有效的方式
17
19
<artifactId >sa-token-core</artifactId >
18
20
<version >1.37.0</version >
19
21
</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 >
41
22
```
42
23
43
24
#### 配置 Sa-Token
44
25
45
26
接下来,需要设置 Sa-Token 的配置类。此类负责初始化 Sa-Token 相关的配置,如 token 的存储方式、有效期、cookie 配置等。
46
27
47
28
``` java
48
- // 导入必要的类和注解
49
29
import com.litongjava.jfinal.aop.annotation.AConfiguration ;
50
30
import com.litongjava.jfinal.aop.annotation.AInitialization ;
51
- import com.litongjava.jfinal.plugin.satoken.SaTokenDaoRedis ;
52
31
import com.litongjava.tio.boot.satoken.SaTokenContextForTio ;
53
32
import cn.dev33.satoken.SaManager ;
54
33
import cn.dev33.satoken.config.SaCookieConfig ;
@@ -191,8 +170,71 @@ public class IndexController {
191
170
- 验证 Token:` http://localhost:8080/auth/validateToken `
192
171
- 访问首页:` http://localhost:8080/ `
193
172
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
+
194
201
### 将 Token 存入 Redis
195
202
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
+
196
238
为了将 token 存储在 Redis 中,需要配置 Redis 连接,并让 Sa-Token 使用 Redis 来存储 token。
197
239
198
240
#### 配置 Redis 连接
@@ -231,13 +273,14 @@ public class RedisPluginConfig {
231
273
然后,在 Sa-Token 的配置中指定使用 Redis 来存储 token。
232
274
233
275
``` java
276
+ import com.litongjava.jfinal.plugin.satoken.SaTokenDaoRedis ;
234
277
// 在 Sa-Token 配置类中添加
235
278
SaManager . setSaTokenDao(new SaTokenDaoRedis (" main" ));
236
279
```
237
280
238
281
通过这种方式,Sa-Token 将使用 Redis 作为 token 的存储介质,提高了应用的可伸缩性和性能。
239
282
240
- #### 总结
283
+ ### 总结
241
284
242
285
整合 Sa-Token 到并使用 Redis 作为存储,为应用提供了一种强大且灵活的方式来处理用户认证和会话管理。通过上述步骤,您可以轻松地在 Tio-Boot 项目中实现基于 token 的身份验证系统,并利用 Redis 的高性能和持久化特性来管理这些 token。
243
286
0 commit comments