首页 > 其他分享 >Springboot 权限认证框架 -- SA-Token 简介(一)

Springboot 权限认证框架 -- SA-Token 简介(一)

时间:2024-06-20 11:00:59浏览次数:23  
标签:StpUtil Springboot 登录 -- token Token SA 权限

引言

现今的软件开发中,权限认证与访问控制是每一个应用都必不可少的功能。SA-Token是一个简单、安全、易用的权限认证框架,它主要解决登录认证、权限认证、Session会话、单点登录等功能。SA-Token以其轻量级、零学习成本的特点,迅速赢得了开发者的青睐。本文将介绍如何在Spring Boot项目中集成SA-Token,实现快速、安全的权限认证。

一、SA-Token简介

SA-Token是一个轻量级Java权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0等功能。你可以使用SA-Token来轻松地实现项目的权限控制,并且几乎零学习成本。SA-Token以简单、易用、安全为主要设计目标,提供了丰富的API和灵活的扩展机制,可以满足大多数项目的需求。

  • 官网文档:https://sa-token.cc/doc.html#/
  • Gitee开源地址: https://gitee.com/dromara/sa-token
  • GitHub开源地址: https://github.com/click33/sa-token
    在这里插入图片描述

二、Spring Boot 项目集成

1. 添加依赖:

在Spring Boot项目的pom.xml文件中添加SA-Token的依赖。

<!-- Sa-Token 权限认证,在线文档:https://sa-token.cc -->
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.38.0</version>
</dependency>

2. 配置SA-Token:

在Spring Boot的配置类 或配置文件 application.yml 中配置SA-Token的相关参数。

application.yml 配置示例:

server:
    # 端口
    port: 8081
    
############## Sa-Token 配置 (文档: https://sa-token.cc) ##############
sa-token: 
    # token 名称(同时也是 cookie 名称)
    token-name: satoken
    # token 有效期(单位:秒) 默认30天,-1 代表永久有效
    timeout: 2592000
    # token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
    active-timeout: -1
    # 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
    is-concurrent: true
    # 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
    is-share: true
    # token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
    token-style: uuid
    # 是否输出操作日志 
    is-log: true

三、SA-Token 常用方法简介

SA-Token提供了一系列的API方法,使得在Java项目中实现权限认证变得简单和直观。以下是一些常用的SA-Token方法简介:

  1. 登录与登出
StpUtil.login(loginId): 会话登录,参数为用户的账号ID。
StpUtil.logout(): 当前会话注销登录。
StpUtil.logoutByLoginId(loginId): 根据账号ID踢人下线。
  1. 登录状态检查
StpUtil.isLogin(): 检查当前会话是否已经登录,返回布尔值。
StpUtil.checkLogin():校验当前客户端是否已经登录,如果未登录则抛出NotLoginException异常。
  1. 权限与角色检查
StpUtil.hasRole(role): 查询当前账号是否含有指定角色标识。
StpUtil.hasPermission(permission): 查询当前账号是否含有指定权限。
  1. Session管理
StpUtil.getSession(): 获取当前账号ID的Session。
StpUtil.getSessionByLoginId(loginId): 根据账号ID获取Session。
  1. Token管理
StpUtil.getTokenValue(): 获取当前会话的Token值。
StpUtil.getTokenValueByLoginId(loginId): 根据账号ID获取Token值。
  1. 账号切换与模拟
StpUtil.switchTo(loginId): 将会话身份临时切换为其它账号。
StpUtil.kickout(loginId): 踢出账号,使其下线。
  1. 自定义Token生成
StpUtil.setLoginId(loginId, deviceId): 指定设备标识登录。
StpUtil.logoutByLoginId(loginId, deviceId): 指定设备标识进行强制注销。
  1. 权限注解
@SaCheckPermission(value = "permission"): 注解鉴权,方法上使用,只有具备指定权限的会话才可以访问该方法。
  1. 路由拦截鉴权
在拦截器中使用StpUtil.checkPermission(permission)来对请求进行权限校验。
  1. 密码加密

提供了多种密码加密方式,如MD5、SHA1、SHA256、AES等。

  1. 自动续签
StpUtil.setLoginId(loginId, timeout): 登录时可以指定Token的有效期,实现自动续签。
  1. 会话查询与治理

提供了会话查询接口,方便开发者进行会话治理。

这些方法覆盖了从用户登录、权限验证到会话管理的各个方面,使得使用SA-Token可以轻松实现复杂的权限控制逻辑。开发者可以根据项目需求选择合适的方法进行集成和扩展。

四、实际案例-- 实现登录逻辑:

1. 编写登录逻辑,使用SA-Token提供的API进行用户认证。

登录访问流程:

  • 用户提交 name + password 参数,调用登录接口。
  • 登录成功,返回这个用户的 Token 会话凭证。
  • 用户后续的每次请求,都携带上这个 Token。
  • 服务器根据 Token 判断此会话是否登录成功。

2. 创建 UserController 示例代码:

@RestController
@RequestMapping("/user/")
public class UserController {

    // 测试登录,浏览器访问: http://localhost:8081/user/doLogin?username=zhang&password=123456
    @RequestMapping("doLogin")
    public String doLogin(String username, String password) {
        // 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对 
        if("zhang".equals(username) && "123456".equals(password)) {
            StpUtil.login(10001);
            return "登录成功";
        }
        return "登录失败";
    }

    // 查询登录状态,浏览器访问: http://localhost:8081/user/isLogin
    @RequestMapping("isLogin")
    public String isLogin() {
        return "当前会话是否登录:" + StpUtil.isLogin();
    }
    
}

权限控制:使用注解或编程方式实现方法级别的权限控制。
Session管理:根据需要配置和管理Session,实现会话共享或隔离。

标签:StpUtil,Springboot,登录,--,token,Token,SA,权限
From: https://blog.csdn.net/dazhong2012/article/details/139760101

相关文章

  • JavaScript基础部分知识点总结(Part3)
    函数的概念1.函数的概念在JS里面,可能会定义非常多的相同代码或者功能相似的代码,这些代码可能需要大量重复使用。虽然for循环语句也能实现一些简单的重复操作,但是比较具有局限性,此时我们就可以使用JS中的函数。函数:就是封装了一段可被重复调用执行的代码块。通过此代码块可......
  • 【usb设备端口异常】——使用ls /dev/video*查看设备号时出现报错:ls:无法访问‘/dev/v
    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录前言一、ls:无法访问'/dev/video*':没有那个文件或目录1.问题描述2.原因分析3.解决方法总结前言一、ls:无法访问’/dev/video*':没有那个文件或目录使用的这款USB摄像头,厂家说是免驱......
  • 当孩子遭遇孤独症,家长如何成为他们生命中的导航灯
    每个孩子都是上天赐予家庭的珍贵礼物,但当孩子被诊断为孤独症时,对于整个家庭来说,无疑是一次巨大的挑战。然而,面对这一挑战,家长们并不需要感到无助和绝望。在心理上和行动上做好准备,我们可以成为孩子最坚实的后盾,陪伴他们一同走过这段特殊的旅程。一、心理调适:保持冷静与乐观当......
  • 基于springboot实现课程答疑管理系统项目【项目源码+论文说明】计算机毕业设计
    摘要随着信息互联网信息的飞速发展,无纸化作业变成了一种趋势,针对这个问题开发一个专门适应师生交流形式的网站。本文介绍了课程答疑系统的开发全过程。通过分析企业对于课程答疑系统的需求,创建了一个计算机管理课程答疑系统的方案。文章介绍了课程答疑系统的系统分析部分......
  • C语言----自定义类型:联合和枚举
     1.联合体联合体的特点像结构体一样,联合体也是一个或者多个成员构成的,这些成员可以是不同的类型联合体的关键字:union结构体的关键字:struct枚举的关键字:enum但是编译器只为最⼤的成员分配⾜够的内存空间。联合体的特点是所有成员共⽤同⼀块内存空间。所以联合体也叫:共......
  • Android面试题 之App性能优化的卡顿监控和卡顿优化
    本文首发于公众号“AntDream”,欢迎微信搜索“AntDream”或扫描文章底部二维码关注,和我一起每天进步一点点卡顿优化这里主要介绍卡顿优化方面的布局优化布局优化1、在主线程中,加载SP,或者是缓存加载,JSON解析,可以放到Idelhander2、viewpager的懒加载,用viewpager2替换v......
  • 基于springboot实现宠物咖啡馆平台管理系统项目【项目源码+论文说明】计算机毕业设计
    摘要随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了基于SpringBoot的宠物咖啡馆平台的设计与实现的开发全过程。通过分析基于SpringBoot的宠物咖啡馆平台的设计与实现管理的不足,创建了一个计算机管理基于SpringBoot的......
  • 生成式人工智能不会为你建立工程团队
    生成式人工智能不会为你建立工程团队软件产业正在成长在某种程度上,这是行业成熟的必然结果。任何领域的早期都有点像狂野的西部,赌注很低,没有监管,标准刚刚形成。如果你看看其他行业的早期历史——医药、电影、广播——相似之处是惊人的。任何新兴技术都有一个神奇的时刻,......
  • World Map Globe Edition 2
    只需点击几下,WorldPoliticalMap-GlobeEdition2就会在场景添加一个美丽且交互式的3D世界地图。将地球预制件拖动到场景中并自定义外观。完整的资产,具有强大的可视化功能、示例和丰富的API,适用于构建VR、桌面和移动游戏和应用程序。主要功能:-在不访问互联网的情况下,按......
  • 【计算机网络仿真】b站湖科大教书匠思科Packet Tracer——实验2 MAC地址,IP地址,ARP协议
    一、实验目的1.掌握计算机网络的寻址问题;2.验证MAC地址与IP地址的关系;3.了解ARP协议的作用。二、实验要求1.使用CiscoPacketTracer仿真平台;2.观看B站湖科大教书匠仿真实验视频,完成对应实验。三、实验内容1.构建网络拓扑;2.配置网络设备;3.跟踪并查看数据包;4.在实......