当前位置: 首页 > news >正文

Spring Boot整合Sa-Token极简指南

一、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等存储(默认内存存储,重启失效)

五、测试验证

  1. 访问 /login?username=admin&password=123456 获取Token
  2. 携带Token访问 /user/info (需成功)
  3. 无Token访问 /user/info (应返回401)
  4. 访问 /admin/delete (非admin角色返回403)

六、总结

  • 核心优势:5行代码实现登录鉴权,注解驱动无侵入
  • 适用场景:中小型项目快速接入权限管理
  • 进阶功能
    • 自动续签Token
    • 多端登录管理
    • 二级认证(敏感操作二次验证)

更多详细内容请看
官方文档:Sa-Token

相关文章:

  • C++ QT零基础教学(二)
  • 六种最新优化算法(TOC、MSO、AE、DOA、GOA、OX)求解多个无人机协同路径规划(可以自定义无人机数量及起始点),MATLAB代码
  • 算法专题一:双指针
  • 基于eNSP的IPV4和IPV6企业网络规划
  • Mac电脑python 有没有ros接口 查看lidar的数据
  • Vue配置和安装教程(2025最新)
  • 小米路由器SSH下安装DDNS-GO
  • Qt 控件概述 QPushButton 与 QRadioButton
  • JDBC技术基础
  • DeepSeek 助力 Vue3 开发:打造丝滑的表格(Table)之添加列宽调整功能,示例Table14_09自定义单元格的固定表头表格
  • 数据结构------线性表(顺序表)
  • CAD球体密堆积3D插件V2.0
  • 【C++】STL全面简介与string类的使用(万字解析)
  • 大盗阿福-选和不选思路:状态数组st写法-->新写法DFS-->记忆化-->递推
  • 初一信息科技教程专用抓包软件1.4.2版本
  • 【经验分享】SpringBoot集成WebSocket开发02 之 实现一个基本示例并Spring Bean注入的方式来组织代码
  • 在浏览器中配置vue请求后端的接口地址
  • 剖析sentinel的限流和熔断
  • 虚幻基础:移动组件
  • x012-MSP430F249智能步进电动百叶窗_proteus_光敏电阻_步进电机_仿真
  • 成都做整站优化/雷神代刷推广网站
  • 手机app制作网站模板/网站seo整站优化