Sa-Token

Posted 深海的渔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Sa-Token相关的知识,希望对你有一定的参考价值。

Sa-Token 是一个轻量级Java权限认证框架,主要解决了:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关的问题。

Sa-Token的API设计非常简单:

// 在登录时写入当前会话的账号id
StpUtil.login(100203);

// 然后在需要校验登录处调用以下方法:
// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常
StpUtil.checkLogin();

权限认证:(只有具备 "user:add" 权限的会话才可以进入请求)

@SaCheckPermission("user:add")
@RequestMapping("/user/login")
public String login(User user) 
    return "用户";

将某个账号强制下线(对方再次访问系统时会抛出 ‘NotLoginExpection’ 异常)

// 将账号id为 100203 的会话踢下线 
StpUtil.kickout(100203);

在Sa-Token中大部分功能都可以通过一行代码来完成:

StpUtil.login(100203);    // 标记当前会话登录的账号id
StpUtil.getLoginId();    // 获取当前会话登录的账号id
StpUtil.isLogin();    // 获取当前会话是否已经登录, 返回true或false
StpUtil.logout();    // 当前会话注销登录
StpUtil.kickout(100203);    // 将账号为100203的会话踢下线
StpUtil.hasRole("admin");    // 查询当前账号是否含有指定角色标识, 返回true或false
StpUtil.hasPermission("user:add");  // 查询当前账号是否含有指定权限, 返回true或false
StpUtil.getSession();    // 获取当前账号id的Session
StpUtil.getSessionByLoginId(100203);    // 获取账号id为100203的Session
StpUtil.getTokenValueByLoginId(100203);    // 获取账号id为100203的token令牌值
StpUtil.login(100203, "PC");    // 指定设备标识登录,常用于“同端互斥登录”
StpUtil.kickout(100203, "PC");    // 指定账号指定设备标识踢下线 (不同端不受影响)
StpUtil.openSafe(120);    // 在当前会话开启二级认证,有效期为120秒 
StpUtil.checkSafe();    // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常 
StpUtil.switchTo(100233);    // 将当前会话身份临时切换为其它账号

注解式鉴权 ---将鉴权和代码进行分离

  • @SaCheckLogin: 登录认证 —— 只有登录之后才能进入该方法
  • @SaCheckRole("admin"): 角色认证 —— 必须具有指定角色标识才能进入该方法
  • @SaCheckPermission("user:add"): 权限认证 —— 必须具有指定权限才能进入该方法
  • @SaCheckSafe: 二级认证校验 —— 必须二级认证之后才能进入该方法
  • @SaCheckBasic: HttpBasic认证 —— 只有通过 Basic 认证后才能进入该方法

Sa-Token简单使用

原文地址:再见 Shiro!权限认证我选择 Sa-Token:简单、优雅!
官网API:Sa-Token

以上是关于Sa-Token的主要内容,如果未能解决你的问题,请参考以下文章

Sa-Token简单使用

一文详解 Sa-Token 中的 SaSession 对象

Sa-Token

SpringBoot:Sa-Token的具体介绍与使用

Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)

SpringBoot 使用 Sa-Token 完成路由拦截鉴权