SaToken
简介
continew-starter-auth-satoken
是 ContiNew Starter 认证模块针对 SaToken 框架的扩展实现,通过简单的配置即可快速集成 SaToken 到项目中。
SaToken
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。
主要特性
- 默认配置:SaToken 样板化配置处理,减少配置工作量
- 灵活的持久层:提供自定义 Redisson 持久层实现,只需配置 Redis 连接信息即可使用;同时支持自定义持久层实现
- 安全防护:内置常见路径排除机制,自动放行静态资源、接口文档等无需认证的路径
- 扩展功能:支持与 JWT 集成,满足分布式系统认证需求
快速开始
引入依赖
xml
<dependency>
<groupId>top.continew.starter</groupId>
<artifactId>continew-starter-auth-satoken</artifactId>
</dependency>
添加配置
配置详情请查看:top.continew.starter.auth.satoken.autoconfigure.SaTokenExtensionProperties
。
yaml
--- ### Sa-Token 配置
sa-token:
# Token 名称(同时也是 cookie 名称)
token-name: Authorization
# Token 有效期(单位:秒,默认 30 天,-1 代表永不过期)
timeout: 86400
# Token 最低活跃频率(单位:秒,默认 -1,代表不限制,永不冻结。如果 token 超过此时间没有访问系统就会被冻结)
active-timeout: 1800
# 是否打开自动续签(如果此值为 true,框架会在每次直接或间接调用 getLoginId() 时进行一次过期检查与续签操作)
auto-renew: true
# 是否允许同一账号多地同时登录(为 true 时允许一起登录,为 false 时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时,是否共用一个 Token(为 true 时所有登录共用一个 Token,为 false 时每次登录新建一个 Token)
is-share: false
# 是否输出操作日志
is-log: false
# JWT 秘钥
jwt-secret-key: asdasdasifhueuiwyurfewbfjsdafjk
## 扩展配置
extension:
enabled: true
enableJwt: true
# 持久层配置
dao.type: REDIS
# 安全配置:排除(放行)路径配置
security.excludes:
- /error
# 静态资源
- /*.html
- /*/*.html
- /*/*.css
- /*/*.js
- /websocket/**
# 接口文档相关资源
- /favicon.ico
- /doc.html
- /webjars/**
- /swagger-ui/**
- /swagger-resources/**
- /*/api-docs/**
已提供样板化配置,如需修改,直接覆盖即可。
yaml
sa-token:
# token 前缀(例如填写 Bearer,实际传参 token 键: Bearer xxxx-xxxx-xxxx-xxxx)
token-prefix: Bearer
# 是否尝试从 请求体 里读取 Token
is-read-body: true
# 是否尝试从 header 里读取 Token
is-read-header: true
# 是否尝试从 cookie 里读取 Token(此值为 false 后,StpUtil.login(id) 登录时也不会再往前端注入 Cookie,适合前后端分离模式)
is-read-cookie: false
自定义持久层
如果需要自定义持久层实现,请修改配置,并实现 cn.dev33.satoken.dao.SaTokenDao
接口,注入到容器中。
yaml
--- ### Sa-Token 配置
sa-token:
## 扩展配置
extension:
enabled: true
enableJwt: true
# 持久层配置
dao.type: CUSTOM
自定义拦截器
如果需要自定义拦截器,只需要参考如下配置注入你的拦截器即可,因为配置了 @ConditionalOnMissingBean
所以会自动覆盖默认的拦截器。
java
/**
* SaToken 拦截器配置
*/
@Bean
public SaInterceptor saInterceptor() {
return new SaInterceptor(handle -> SaRouter.match(StringConstants.PATH_PATTERN)
.notMatch(properties.getSecurity().getExcludes())
.check(r -> StpUtil.checkLogin()));
}
核心依赖
依赖 | 描述 |
---|---|
top.continew.starter:continew-starter-cache-redisson(optional) | 缓存模块 - Redisson |
cn.dev33:sa-token-spring-boot3-starter | Sa-Token(轻量级 Java 权限认证框架,让鉴权变得简单、优雅) |
cn.dev33:sa-token-jwt | Sa-Token 整合 JWT |
cn.dev33:sa-token-redisson | Sa-Token 集成 Redisson 客户端 |
参考资料
- SaToken 官方文档:https://sa-token.cc/