SaToken使用

  1. 什么是SaToken?

Sa-Token是一个轻量级Java权限认证框架,官网地址:https://sa-token.cc/ ,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。

  1. SaToken功能

Sa-Token目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。
Loading

  1. 使用配置

pom.xml文件引入对应依赖:

1
2
3
4
5
6
<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.39.0</version>
</dependency>

在application.yml中填写相关配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
sa-token:
# token 名称(同时也是 cookie 名称)
token-name: satoken
# token 有效期(单位:秒) 默认30天,-1 代表永久有效
timeout: 2592000
# token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
active-timeout: -1
# 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
is-share: true
# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
token-style: uuid
# 是否输出操作日志
is-log: true
  1. 自定义 Token 生成风格与请求格式

在 SaToken 中,Token 风格可以通过 sa-token.token-style 配置项来定制,默认的生成策略是 uuid 风格,值类似于 623368f0-ae5e-4475-a53f-93e4225f16ae

SaToken 内置支持的风格有多种,大致如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/ 1. token-style=uuid    —— uuid风格 (默认风格)
"623368f0-ae5e-4475-a53f-93e4225f16ae"

// 2. token-style=simple-uuid —— 同上,uuid风格, 只不过去掉了中划线
"6fd4221395024b5f87edd34bc3258ee8"

// 3. token-style=random-32 —— 随机32位字符串
"qEjyPsEA1Bkc9dr8YP6okFr5umCZNR6W"

// 4. token-style=random-64 —— 随机64位字符串
"v4ueNLEpPwMtmOPMBtOOeIQsvP8z9gkMgIVibTUVjkrNrlfra5CGwQkViDjO8jcc"

// 5. token-style=random-128 —— 随机128位字符串
"nojYPmcEtrFEaN0Otpssa8I8jpk8FO53UcMZkCP9qyoHaDbKS6dxoRPky9c6QlftQ0pdzxRGXsKZmUSrPeZBOD6kJFfmfgiRyUmYWcj4WU4SSP2ilakWN1HYnIuX0Olj"

// 6. token-style=tik —— tik风格
"gr_SwoIN0MC1ewxHX_vfCW3BothWDZMMtx__"
  1. 自定义Token请求风格

比较通用、规范的 Token 请求格式:
Authorization = Bearer + 空格 + 令牌值

修改SaToken配置:

1
2
3
4
5
sa-token:
# token 名称(同时也是 cookie 名称)
token-name: Authorization
# token前缀
token-prefix: Bearer

存在问题

在我们已经将 SaToken 权限认证框架整合进了项目。但是有个问题,当调用 TestController 中的登录接口 /user/doLogin?username=zhang&password=123456 ,登录成功后再重启项目,调用 /user/isLogin 接口,验证一下用户是否登录的时候,会发现登录已经失效了。

登录失效的原因?

Sa-Token 默认将数据保存在内存中,此模式读写速度最快,且避免了序列化与反序列化带来的性能消耗,但是此模式也有一些缺点,比如:

  • 重启后数据会丢失。

  • 无法在分布式环境中共享数据。

解决方案

为此,Sa-Token 提供了扩展接口,你可以轻松将会话数据存储在一些专业的缓存中间件上(比如 Redis), 做到重启数据不丢失,而且保证分布式环境下多节点的会话一致性。

项目pom.xml引入依赖:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    <!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis-jackson</artifactId>
<version>${sa-token.version}</version>
</dependency>

<!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis-jackson</artifactId>
</dependency>

<!-- Redis 连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>

SaToken使用
http://bloomivy.github.io/2025/01/22/SaToken使用/
作者
Bloom
发布于
2025年1月22日
许可协议