文章目录
1. Sa-Token 框架配置
- Sa-Token官方文档链接: Sa-Token 框架配置
1. 配置方式 yml
############## 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
2. 代码方式
/**
* Sa-Token 配置类
*/
@Configuration
public class SaTokenConfigure {
// Sa-Token 参数配置,参考文档:https://sa-token.cc
// 此配置会覆盖 application.yml 中的配置
@Bean
@Primary
public SaTokenConfig getSaTokenConfigPrimary() {
SaTokenConfig config = new SaTokenConfig();
config.setTokenName("satoken"); // token 名称(同时也是 cookie 名称)
config.setTimeout(30 * 24 * 60 * 60); // token 有效期(单位:秒),默认30天,-1代表永不过期
config.setActiveTimeout(-1); // token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
config.setIsConcurrent(true); // 是否允许同一账号多地同时登录(为 true 时允许一起登录,为 false 时新登录挤掉旧登录)
config.setIsShare(true); // 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token,为 false 时每次登录新建一个 token)
config.setTokenStyle("uuid"); // token 风格
config.setIsLog(false); // 是否输出操作日志
return config;
}
}
/**
* Sa-Token 配置类
*/
@Configuration
public class SaTokenConfigure {
// Sa-Token 参数配置,参考文档:https://sa-token.cc
// 此配置会与 application.yml 中的配置合并 (代码配置优先)
@Autowired
public void configSaToken(SaTokenConfig config) {
config.setTokenName("satoken"); // token 名称(同时也是 cookie 名称)
config.setTimeout(30 * 24 * 60 * 60); // token 有效期(单位:秒),默认30天,-1代表永不过期
config.setActiveTimeout(-1); // token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
config.setIsConcurrent(true); // 是否允许同一账号多地同时登录(为 true 时允许一起登录,为 false 时新登录挤掉旧登录)
config.setIsShare(true); // 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token,为 false 时每次登录新建一个 token)
config.setTokenStyle("uuid"); // token 风格
config.setIsLog(false); // 是否输出操作日志
}
}
3. 核心包所有可配置项
参数名称 | 类型 | 默认值 | 说明 |
---|---|---|---|
tokenName | String | satoken | Token 名称 (同时也是 Cookie 名称、数据持久化前缀) |
timeout | long | 2592000 | Token 有效期(单位:秒),默认30天,-1代表永不过期 参考:token有效期详解 |
activeTimeout | long | -1 | Token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结(例如可以设置为1800代表30分钟内无操作就冻结) 参考:token有效期详解 |
dynamicActiveTimeout | Boolean | false | 是否启用动态 activeTimeout 功能,如不需要请设置为 false,节省缓存请求次数 |
isConcurrent | Boolean | true | 是否允许同一账号并发登录 (为 true 时允许一起登录,为 false 时新登录挤掉旧登录) |
isShare | Boolean | true | 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token,为 false 时每次登录新建一个 token,login 时提供了 Extra 数据后,即使配置了为 true 也不能复用旧 Token,必须创建新 Token) |
maxLoginCount | int | 12 | 同一账号最大登录数量,-1代表不限 (只有在 isConcurrent=true ,isShare=false 时此配置才有效),详解 |
maxTryTimes | int | 12 | 在每次创建 Token 时的最高循环次数,用于保证 Token 唯一性(-1=不循环重试,直接使用) |
isReadBody | Boolean | true | 是否尝试从 请求体 里读取 Token |
isReadHeader | Boolean | true | 是否尝试从 header 里读取 Token |
isReadCookie | Boolean | true | 是否尝试从 cookie 里读取 Token,此值为 false 后,StpUtil.login(id) 登录时也不会再往前端注入Cookie |
isWriteHeader | Boolean | false | 是否在登录后将 Token 写入到响应头 |
tokenStyle | String | uuid | token风格, 参考:自定义Token风格 |
dataRefreshPeriod | int | 30 | 默认数据持久组件实现类中,每次清理过期数据间隔的时间 (单位: 秒) ,默认值30秒,设置为-1代表不启动定时清理 |
tokenSessionCheckLogin | Boolean | true | 获取 Token-Session 时是否必须登录 (如果配置为true,会在每次获取 Token-Session 时校验是否登录),详解 |
autoRenew | Boolean | true | 是否打开自动续签 (如果此值为true,框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作),参考:token有效期详解 |
tokenPrefix | String | null | token前缀,例如填写 Bearer 实际传参 satoken: Bearer xxxx-xxxx-xxxx-xxxx 参考:自定义Token前缀 |
isPrint | Boolean | true | 是否在初始化配置时打印版本字符画 |
isLog | Boolean | false | 是否打印操作日志 |
logLevel | String | trace | 日志等级(trace、debug、info、warn、error、fatal),此值与 logLevelInt 联动 |
logLevelInt | int | 1 | 日志等级 int 值(1=trace、2=debug、3=info、4=warn、5=error、6=fatal),此值与 logLevel 联动 |
isColorLog | Boolean | null | 是否打印彩色日志,true=打印彩色日志,false=打印黑白日志,null=框架根据运行终端自行判断是否打印彩色日志 |
jwtSecretKey | String | null | jwt秘钥 (只有集成 sa-token-temp-jwt 模块时此参数才会生效),参考:和 jwt 集成 |
sameTokenTimeout | long | 86400 | Same-Token的有效期 (单位: 秒),参考:内部服务外网隔离 |
basic | String | “” | Http Basic 认证的账号和密码 参考:Http Basic 认证 |
currDomain | String | null | 配置当前项目的网络访问地址 |
checkSameToken | Boolean | false | 是否校验Same-Token(部分rpc插件有效) |
cookie | Object | new SaCookieConfig() | Cookie 配置对象 |
sign | Object | new SaSignConfig() | API 签名配置对象 |
2. Sa-Token 集成Redis
- Sa-Token官方文档链接: Sa-Token 集成Redis
Sa-Token 集成 Redis之后, token / session 等信息自动存储到指定Redis中
1. Sa-Token 集成 Redis (JDK序列化)
- Session 序列化后基本不可读,对开发者来讲等同于乱码
<!-- Sa-Token 整合 Redis (使用 jdk 默认序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis</artifactId>
<version>1.39.0</version>
</dependency>
<!-- 提供Redis连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
2. (推荐) Sa-Token 集成 Redis (Jackson序列化)
<!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-redis-jackson</artifactId>
<version>1.39.0</version>
</dependency>
<!-- 提供Redis连接池 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
3. yml 配置
spring:
# redis配置
redis:
# Redis数据库索引(默认为0)
database: 1
# Redis服务器地址
host: 127.0.0.1
# Redis服务器连接端口
port: 6379
# Redis服务器连接密码(默认为空)
# password:
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池最大连接数
max-active: 200
# 连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
# 连接池中的最大空闲连接
max-idle: 10
# 连接池中的最小空闲连接
min-idle: 0