一、Sa-Token是什么?
轻量级Java权限认证框架,核心能力:
✅ 登录认证 | ✅ 权限校验 | ✅ 会话管理 | ✅ 自动续签
优势:比Shiro更简单,比Spring Security更轻量,开箱即用
二、Spring Boot整合三步走
1. 添加依赖(关键!)
<!-- pom.xml -->
<dependency>
<groupId>cn.dev33</groupId>
<artifactId>sa-token-spring-boot-starter</artifactId>
<version>1.37.0</version> <!-- 以最新版本为准 -->
</dependency>
注意:确保Spring Boot版本≥2.6.x
2. 配置文件(可选,但推荐)
# application.yml
sa-token:
token-name: satoken # Token名称
timeout: 7200 # Token有效期(秒)
is-concurrent: true # 允许并发登录
is-share: true # 多人共享同一账号
3. 启动类加注解
@SpringBootApplication
@EnableSaToken // 关键注解
public class App {
public static void main(String[] args) {
SpringApplication.run(App.class, args);
}
}
三、核心功能代码演示
1. 登录认证(用户身份标记)
@RestController
public class LoginController {
@PostMapping("/login")
public String login(@RequestParam String username, @RequestParam String password) {
if ("admin".equals(username) && "123456".equals(password)) {
StpUtil.login(10001); // 用户ID=10001
return "登录成功,Token:" + StpUtil.getTokenValue();
}
return "账号密码错误";
}
@GetMapping("/logout")
public String logout() {
StpUtil.logout();
return "退出成功";
}
}
2. 注解鉴权(接口权限控制)
@GetMapping("/user/info")
@SaCheckLogin // 必须登录
public String userInfo() {
return "用户信息:" + StpUtil.getLoginId();
}
@GetMapping("/admin/delete")
@SaCheckRole("admin") // 必须拥有admin角色
public String delete() {
return "删除成功";
}
3. 路由拦截(统一鉴权)
@Configuration
public class SaTokenConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SaInterceptor(handler -> {
// 拦截所有地址,排除/login
SaRouter.match("/**").notMatch("/login").check(r -> StpUtil.checkLogin());
})).addPathPatterns("/**");
}
}
4. 会话管理(踢人下线)
@GetMapping("/kick")
public String kickUser(@RequestParam Long userId) {
StpUtil.kickout(userId); // 强制指定用户退出
return "用户已被踢下线";
}
四、常见问题
Q1:依赖冲突报错?
- 排查是否引入其他权限框架(如Shiro/Spring Security),需排除冲突包
Q2:注解不生效?
- 确保启动类添加
@EnableSaToken
- 检查拦截路径是否正确
Q3:如何自定义Token存储?
- 实现
SaTokenDao
接口,注入Redis等存储(默认内存存储,重启失效)
五、测试验证
- 访问
/login?username=admin&password=123456
获取Token - 携带Token访问
/user/info
(需成功) - 无Token访问
/user/info
(应返回401) - 访问
/admin/delete
(非admin角色返回403)
六、总结
- 核心优势:5行代码实现登录鉴权,注解驱动无侵入
- 适用场景:中小型项目快速接入权限管理
- 进阶功能:
- 自动续签Token
- 多端登录管理
- 二级认证(敏感操作二次验证)
更多详细内容请看
官方文档:Sa-Token