相比于其他常用的权限认证框架如Shiro、SpringSecurity等,Sa-Token是一个轻量级的权限认证框架,其使用方式简单,容易上手,更加适用于小型项目的研发。
常用功能
Sa-Token的常用功能主要有:
登录认证:单端登录、多端登录、同端互斥登录、七天内免登录
权限认证:权限认证、角色认证、会话二级认证
单点登录:内置三种单点登录模式:无论是否跨域、是否共享Redis,都可以搞定
OAuth2.0: 轻松搭建 OAuth2.0 服务,支持openid模式
微服务鉴权:适配Gateway、ShenYu、Zuul等常见网关的路由拦截认证
在SpringBoot环境中集成
依赖引入
Maven方式依赖引入
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.34.0</version>
</dependency>
配置文件
Sa-Token可以零配置启动,如果你需要定制化需求,则可通过在配置文件(如application.yml)中添加如下配置实现
sa-token:
# token名称 (同时也是cookie名称)
token-name: satoken
# token有效期,单位s 默认30天, -1代表永不过期
timeout: 2592000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout: -1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent: true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share: true
# token风格
token-style: uuid
# 是否输出操作日志
is-log: false
登录认证
登录接口Demo
@RequestMapping("login")
public SaResult doLogin(String name, String pwd) {
//获取保存的用户信息
User user = userDao.getByUserName(name);
//与前端提交的用户信息比对
if(user.getName().equals(name) && user.getPwd().equals(pwd)) {
// 调用Sa-Token提供的方法登录,该方法利用本地缓存记录登录信息
StpUtil.login(user.getId());
return SaResult.ok("登录成功");
}
return SaResult.error("登录失败");
}
此外,Sa-Token还提供了很多API能方便获取登录相关信息
// 当前会话注销登录
StpUtil.logout();
// 获取当前会话是否已经登录,返回true=已登录,false=未登录
StpUtil.isLogin();
// 检验当前会话是否已经登录, 如果未登录,则抛出异常:`NotLoginException`
StpUtil.checkLogin();
// 获取当前会话的token信息参数
StpUtil.getTokenInfo();
// 获取当前会话剩余有效期(单位:s,返回-1代表永久有效)
StpUtil.getTokenTimeout();
更多用法
除了以上介绍的基础功能及简单用法,Sa-Token还提供了很多权限认证相关的能力,例如当需要在分布式环境中使用鉴权认证时,Sa-Token提供了集成Redis作为数据存储的方式,当遇到APP、小程序等不支持Cookie的终端,Sa-Token支持前后端分离的无Cookie鉴权模式,此外还有单点登录、同端互斥登录、账号封禁等能力。想要了解更多Sa-Token的相关使用方式,可访问Sa-Token官方文档:https://sa-token.cc/doc.html#/。