核心内容摘要
探索“三上悠亚”的银幕魅力:不止于性感,更是多元角色的一次次突破
视频看了几百小时还迷糊关注我几分钟让你秒懂Sa-Token 是一个轻量级 Java 权限认证框架开箱即用、零侵入、API 极简。
但很多开发者在集成后发现登录后 token 没生效会话无法跨服务共享用户登出不彻底权限校验总是失败其实这些问题大多源于配置不当本文将带你全面掌握 Sa-Token 的核心配置项涵盖基础设置、Redis 集成、安全加固、生产调优并附上完整 Spring Boot 示例 反例避坑指南小白也能一次配对
Sa-Token 配置方式Sa-Token 支持两种配置方式YAML / Properties 文件配置推荐Java Config 编码配置高级场景我们以application.yml为主这是最常用的方式。
完整配置示例含注释sa-token: # 【必看】核心配置项说明 ↓↓↓ # Token 名称前端请求头中携带的字段名 token-name: Authorization # 默认: satoken # Token 有效期单位秒-1 表示永不过期 timeout: 2592000 # 默认: 2592000 (30天) # Token 最低活跃时间单位秒 # 用户在 timeout 时间内至少访问一次token 才会续期 active-timeout: 1800 # 默认: 0不启用 # 是否允许同一账号多地登录true允许false新登录踢掉旧会话 is-concurrent: false # 默认: true # 在多人登录同一账号时是否共用一个 tokentrue共用false独立 is-share: false # 默认: false # Token 风格可选uuid / simple-uuid / random-32 / random-64 / tiktok-uuid token-style: uuid # 默认: uuid # 是否输出 Sa-Token 日志用于调试 is-log: true # 默认: false # 【重要】是否在 Cookie 中写入 tokenWeb 项目可开启 is-write-header: true # 默认: true写入响应头 is-read-cookie: false # 默认: false不从 Cookie 读 # 【分布式必备】Session 存储方式默认内存生产必须改 Redis # 注意只要引入 spring-boot-starter-data-redisSa-Token 会自动使用 Redis✅只需添加以上配置即可满足 90% 场景
生产环境关键配置详解
Token 名称token-name前端需在请求头中携带此字段GET /api/user Authorization: xxx-xxx-xxx如果你用的是satoken默认值前端就要传satoken: xxx建议改为Authorization符合 RESTful 规范也方便网关统一处理。
会话有效期timeout active-timeout配置作用timeout: 1800token 30 分钟后过期active-timeout: 900如果用户 15 分钟内无操作即使未到 30 分钟也过期推荐组合普通系统timeout864001天active-timeout180030分钟金融/支付系统timeout1800active-timeout
并发控制is-concurrentis-concurrent: false→单点登录SSO效果用户在 A 设备登录后B 设备再登录A 设备自动失效。
is-concurrent: true→ 允许多地同时在线如 Web App✅ 大多数后台管理系统应设为false提升安全性
Token 风格token-style风格示例特点uuida1b2c3d4-...标准 UUID长度固定simple-uuida1b2c3d4e5f
..无横线 UUIDrandom-32xK9mQpL2nR8sT4vW...32位随机字符串tiktok-uuid时间戳随机有序且唯一推荐性能好适合分页查询生产推荐tiktok-uuid既保证唯一性又便于日志追踪和数据库索引优化。
集成 Redis分布式会话必备
添加依赖dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-data-redis/artifactId /dependency
配置 Redis 连接application.ymlspring: redis: host: localhost port: 6379 password: database: 0 timeout: 2000ms✅无需任何额外代码Sa-Token 检测到 Redis 后自动将会话存储到 Redis支持集群、重启不丢失⚠️
反例错误配置导致的安全问题❌ 反例1生产环境未配 Redis# 什么都没配默认用内存存储后果服务重启 → 所有用户掉线多实例部署 → 会话不共享登录状态混乱。
❌ 反例2token-name 与前端不一致sa-token: token-name: satoken但前端传的是axios.defaults.headers.common[Authorization] token;后果Sa-Token 找不到 token所有请求返回 401✅解决统一命名或让前端按satoken字段传。
❌ 反例3is-concurrenttrue 敏感系统银行后台允许多地登录黑客盗取 token 后可长期潜伏。
✅解决敏感系统设is-concurrent: false新登录踢旧会话。
Java Config 方式动态配置如果需要运行时动态调整配置如从数据库读可用 Java 方式Configuration public class SaTokenConfig { Bean public SaTokenConfig config() { return new SaTokenConfig() .setTimeout(
.setTokenName(Authorization) .setIsConcurrent(false) .setTokenStyle(tiktok-uuid) .setIsLog(true); } }⚠️ 注意YAML 和 Java Config 不能同时生效优先级Java YAML。
✅