手把手教你SpringBoot整合sa-token权限框架

点击上方“Thinking曹”,勾选“设为星标”

前言

过去的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 😋

在线文档:http://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. 获取源码

  • github地址: https://github.com/click33/sa-token
  • gitee地址: https://gitee.com/sz6/sa-token

3. jar包下载

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

四、准备工作

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


五、工程搭建

1. 创建SpringBoot项目

手把手教你SpringBoot整合sa-token权限框架
在这里插入图片描述

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
  • 如果你习惯于 application.properties 类型的配置文件,那也很好办:
  • 百度:springboot properties与yml 配置文件的区别

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. 运行

运行代码,当你从控制台看到类似下面的内容时,就代表框架已经成功集成了手把手教你SpringBoot整合sa-token权限框架手把手教你SpringBoot整合sa-token权限框架


六、普通spring环境

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

七、sa-token常用API介绍

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

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信息如下:

手把手教你SpringBoot整合sa-token权限框架
控制台打印sa-token参数信息

九、源码下载

1. 源码

https://github.com/Thinkingcao/SpringBootLearning/sa-token-demo-springboot

2. 参考

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

总结

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



长按下图二维码,关注公众号「Thinking曹」,在通往Java架构的路上我想与你一同前行,共同进步手把手教你SpringBoot整合sa-token权限框架


手把手教你SpringBoot整合sa-token权限框架


原创不易,如果您觉得文章对你有用,请动动你的小手指,点赞、在看、转发来一波,你的支持就是我创作的最大动力手把手教你SpringBoot整合sa-token权限框架手把手教你SpringBoot整合sa-token权限框架手把手教你SpringBoot整合sa-token权限框架

原文始发于微信公众号(Thinking曹):手把手教你SpringBoot整合sa-token权限框架

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/26859.html

(1)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!