一、Sa-Token 是什么?

Sa-Token 是一款由国人开发的轻量级 Java 权限认证框架,核心目标是让权限认证变得简单、优雅。它不依赖任何第三方框架(如 Spring),但可无缝集成到 Spring Boot/Spring Cloud 项目中,专门解决登录认证、权限校验、Token 管理、单点登录等常见的权限相关问题,相比 Shiro、Spring Security 更轻量化、上手成本更低。

二、Sa-Token 核心功能

Sa-Token 提供了丰富且实用的功能,覆盖权限认证全场景:

  • 登录认证:支持账号密码登录、记住我、多端登录、临时登录等;
  • 权限认证:角色认证、权限码认证、注解式鉴权、拦截器鉴权;
  • Token 管理:自定义 Token 规则、过期时间、刷新策略、多 Token 体系;
  • 扩展功能:单点登录(SSO)、踢人下线、账号封禁、接口限流、模拟登录、临时身份切换等。

三、快速上手(Spring Boot 集成)

1. 引入依赖

在 Maven 项目的 pom.xml 中添加 Sa-Token 核心依赖(建议使用最新版本):

<!-- Sa-Token Spring Boot 集成包 -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.38.0</version>
</dependency>
2. 基础配置(可选)

在 application.yml 中配置基础参数(不配置则使用默认值):

sa-token:
  token-name: satoken          # Token 名称(前端 Cookie/Header 名称)
  timeout: 2592000             # Token 有效期(秒),默认30天
  activity-timeout: 7200       # 临时有效期(秒),默认2小时(记住我功能)
  is-concurrent: true          # 允许同一账号多地登录
  is-share: false              # 登录时不踢掉之前的同账号会话
  token-style: uuid            # Token 生成风格(uuid/random-32等)
  is-log: false                # 是否输出操作日志
3. 核心使用示例

编写控制器演示登录、鉴权、退出等核心操作:

import cn.dev33.satoken.stp.StpUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SaTokenDemoController {

    // 1. 登录接口:模拟用户登录
    @GetMapping("/login/{userId}")
    public String login(@PathVariable String userId) {
        // 绑定用户ID与当前会话,完成登录
        StpUtil.login(userId);
        // 获取当前用户的Token
        String token = StpUtil.getTokenValue();
        return "登录成功!Token:" + token + ",用户ID:" + StpUtil.getLoginId();
    }

    // 2. 验证登录状态:未登录则返回提示
    @GetMapping("/checkLogin")
    public String checkLogin() {
        if (StpUtil.isLogin()) {
            return "已登录,用户ID:" + StpUtil.getLoginId();
        }
        return "未登录!";
    }

    // 3. 注解式鉴权:必须登录才能访问
    @cn.dev33.satoken.annotation.SaCheckLogin
    @GetMapping("/needLogin")
    public String needLogin() {
        return "只有登录后才能看到这条信息!";
    }

    // 4. 退出登录
    @GetMapping("/logout")
    public String logout() {
        StpUtil.logout();
        return "退出登录成功!";
    }
}
4. 测试效果
  • 访问 http://localhost:8080/login/10086,返回登录成功及 Token;
  • 访问 http://localhost:8080/checkLogin,返回已登录及用户 ID;
  • 访问 http://localhost:8080/logout 后,再访问 checkLogin,返回未登录;
  • 未登录时访问 http://localhost:8080/needLogin,会直接抛出未登录异常(可自定义异常处理)。

四、关键概念解释

  1. StpUtil:Sa-Token 核心工具类,登录、鉴权、退出等所有操作都通过这个类完成;
  2. Token:用户登录后的唯一凭证,前端需携带 Token(Header/Cookie),后端通过 Token 识别用户身份;
  3. 注解式鉴权:通过 @SaCheckLogin(登录校验)、@SaCheckRole("admin")(角色校验)、@SaCheckPermission("user:add")(权限校验)等注解,无需手动写判断逻辑,快速实现接口级鉴权。
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐