阅读 1962
Spring Boot 系列教程 | 第一百一篇:SpringBoot整合sa-token权限框架

Spring Boot 系列教程 | 第一百一篇:SpringBoot整合sa-token权限框架

前言

过去的Web项目开发里,我们使用最多的两种权限框架有ShiroSpring SecurityShiro轻量级、入门门槛低功能相对也强大;Spring Security背景强大,功能丰富,入门门槛相对高,配置稍微复杂,由Spring团队开源。而现如今将介绍一款轻量级、功能强大且几乎零配置的sa-token权限框架, sa-token是一个JavaWeb权限认证框架,强大、简单、好用。

一、核心知识

1. 什么是sa-token

sa-token是一个JavaWeb权限认证框架,强大、简单、好用

登录验证、权限验证、自定义session会话、踢人下线、持久层扩展、无cookie模式、模拟他人账号、多账号体系、注解式鉴权、Spring集成...

零配置开箱即用,覆盖所有应用场景,你所需要的功能,这里都有

与其它权限认证框架相比,sa-token有以下两点优点:

  • 上手简单:能自动化的配置全部自动化,不让你费脑子
  • 功能强大:能涵盖的功能全部涵盖,不让你用个框架还要自己给框架打各种补丁

2. sa-token 😋

在线文档:sa-token.dev33.cn/

3. 框架优点

与其它权限认证框架相比,sa-token尽力保证两点:

上手简单:能自动化的配置全部自动化,不让你费脑子 功能强大:能涵盖的功能全部涵盖,不让你用个框架还要自己给框架打各种补丁


二、涵盖功能

  • 登录验证
  • 权限验证
  • 自定义session会话
  • 踢人下线
  • 模拟他人账号
  • 持久层扩展(集成redis)
  • 多账号认证体系(比如一个商城项目的user表和admin表)
  • 无cookie模式(APP、小程序等前后台分离场景)
  • 注解式鉴权(优雅的将鉴权与业务代码分离)
  • 零配置与Spring等框架集成
  • ...

三、集成

1. maven依赖

在项目中直接通过 pom.xml 导入 sa-token 的依赖即可

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token</artifactId>
    <version>1.4.0</version>
</dependency>
复制代码

2. 获取源码

3. jar包下载

点击下载:sa-token-1.4.0.jar

四、准备工作

本篇将带你从零开始集成sa-token,从而让你快速熟悉sa-token的使用姿势,以maven + springboot为例


五、工程搭建

1. 创建SpringBoot项目

在这里插入图片描述

1.2 引入sa-token的依赖

<!-- sa-token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
   <groupId>cn.dev33</groupId>
   <artifactId>sa-token</artifactId>
   <version>1.4.0</version>
</dependency>
复制代码

2. 引入jar包依赖

  • 在 pom.xml 中添加依赖,完整pom如下:
<!-- web应用依赖 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-web</artifactId>
</dependency>

<!-- lombok代码简化工具 -->
<dependency>
   <groupId>org.projectlombok</groupId>
   <artifactId>lombok</artifactId>
   <optional>true</optional>
</dependency>

<!-- sa-token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
   <groupId>cn.dev33</groupId>
   <artifactId>sa-token</artifactId>
   <version>1.4.0</version>
</dependency>
复制代码

3. 配置文件

  • 你可以零配置启动项目
  • 但同时你也可以在application.yml中增加如下配置,定制性使用框架:
server:
  port: 8070

spring:
  # sa-token配置
  sa-token:
    # token名称(同时也是cookie名称)
    token-name: satoken
    # token有效期,单位s 默认30天
    timeout: 2592000
    # 在多人登录同一账号时,是否共享会话(为true时共用一个,为false时新登录挤掉旧登录)
    is-share: true
    # 是否在cookie读取不到token时,继续从请求header里继续尝试读取
    is-read-head: true
    #  是否在header读取不到token时,继续从请求题参数里继续尝试读取
    is-read-body: true
    # 是否在初始化配置时打印版本字符画
    is-v: true
复制代码

4. 创建主类

在项目中新建包 com.pj ,在此包内新建主类 SaTokenDemoApplication.java,输入以下代码:

@SaTokenSetup // 标注启动 sa-token
@SpringBootApplication
public class SaTokenDemoApplication {
    public static void main(String[] args) throws JsonProcessingException {
        SpringApplication.run(SaTokenDemoApplication.class, args); // run-->
        System.out.println("启动成功:sa-token配置如下:" + SaTokenManager.getConfig());
    }
}
复制代码

5. 运行

运行代码,当你从控制台看到类似下面的内容时,就代表框架已经成功集成了 运行结果 在这里插入图片描述


六、普通spring环境

普通spring环境与springboot环境大体无异,只不过需要在项目根目录下手动创建配置文件sa-token.properties来完成配置即可。

七、sa-token常用API介绍

官方提供了一系列的常用API接口,这里只简单介绍一下登录相关的API接口: sa-token.dev33.cn/doc/#/use/l…

1. 登录验证

1.1 核心思想

  • 所谓登录验证,说白了就是限制某些接口只有登录后才能访问(如:查询我的账号资料)
  • 如何判断你有没有登录?当然是登录成功后我给你做个标记
  • 在需要鉴权的接口里检查标记,有标记者视为已登录,无标记者视为未登录
  • 根据以上思路,我们很容易想到以下api:

1.2 具体API

StpUtil.setLoginId(Object loginId)

  • 标记当前会话登录的账号id
  • 建议的参数类型:long | int | String, 不可以传入复杂类型,如:User、Admin等等

StpUtil.logout()

  • 当前会话注销登录

StpUtil.isLogin()

  • 获取当前会话是否已经登录,返回true=已登录,false=未登录

StpUtil.checkLogin()

  • 检验当前会话是否已经登录, 如果未登录,则抛出异常:NotLoginException
  • 扩展:NotLoginException 对象可通过 getLoginKey() 方法获取具体是哪个 StpLogic 抛出的异常

StpUtil.getLoginId()

获取当前会话登录id, 如果未登录,则抛出异常:NotLoginException 类似API还有:

StpUtil.getLoginIdAsString() 获取当前会话登录id, 并转化为String类型

StpUtil.getLoginIdAsInt() 获取当前会话登录id, 并转化为int类型

StpUtil.getLoginIdAsLong() 获取当前会话登录id, 并转化为long类型

StpUtil.getLoginId(T defaultValue)

  • 获取当前会话登录id, 如果未登录,则返回默认值 (defaultValue可以为任意类型)
  • 类似API还有:

StpUtil.getLoginId_defaultNull() 获取当前会话登录id, 如果未登录,则返回null

getLoginIdByToken(String tokenValue)

  • 获取指定token对应的登录id,如果未登录,则返回 null

八、项目测试

1. 启动SpringBoot项目

启动SpringBoot示例项目,控制天打印sa-token信息如下:

在这里插入图片描述


九、源码下载

1. 源码

github.com/Thinkingcao…


2. 参考

官方文档: sa-token.dev33.cn/


总结

每一种Java框架在每个不同时期都有对应的优缺点,相比ShiroSpring Security 这些权限框架,sa-token显得相对轻量级,因为sa-token仅仅封装了一些常用的登录验证、权限验证、自定义session会话、踢人下线等功能,是一款强大、简单、好用的权限框架。

长按下图二维码,关注公众号「Thinking曹」,在通往Java架构的路上我想与你一同前行,共同进步!

文章分类
后端
文章标签