当前位置: 首页 > news >正文

Spring Boot 集成 sa-token 实践教程

Spring Boot 集成 sa-token 实践教程

sa-token 是一个轻量级且功能强大的权限认证框架,它基于Java语言,专为Java开发者设计,以简化权限管理的复杂性。在Spring Boot项目中集成sa-token,可以快速实现会话管理、权限控制等功能。本文将通过教程式写作,带领读者一步步实现Spring Boot与sa-token的集成。

环境准备

  • JDK 1.8 或以上版本
  • Maven 或 Gradle 作为构建工具
  • Spring Boot 2.x 版本
  • IntelliJ IDEA 或 Eclipse 作为开发IDE

集成步骤

添加依赖

首先,需要在项目的pom.xml文件中添加sa-token的依赖。以Maven为例:

<dependencies><!-- 引入sa-token核心模块 --><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot-starter</artifactId><version>1.21.0</version></dependency><!-- 其他Spring Boot依赖 -->
</dependencies>

配置文件

application.propertiesapplication.yml中,可以对sa-token进行一些基本配置,例如:

sa-token.token-name = sa-token
sa-token.token-time = 3600

启用sa-token

创建一个配置类,启用sa-token

import org.springframework.context.annotation.Configuration;
import cn.dev33.satoken.spring.SaTokenConfig;@Configuration
public class SaTokenConfigDemo implements SaTokenConfig {@Overridepublic void config() {// 此处可以配置sa-token的行为}
}

编写登录逻辑

实现一个登录方法,用于生成token:

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.SaToken;
import cn.dev33.satoken.stp.SaLoginModel;@RestController
public class LoginController {@PostMapping("/login")public String login(@RequestParam("username") String username,@RequestParam("password") String password) {// 假设此处有数据库校验逻辑if ("admin".equals(username) && "123456".equals(password)) {// 账号密码校验成功后,使用sa-token进行登录SaManager.login(10001); // 假设10001是当前登录用户的idreturn "登录成功";} else {return "账号或密码错误";}}
}

权限控制

使用@SaCheckPermission注解实现权限控制:

import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class SecureController {@GetMapping("/secure")@SaCheckPermission("admin") // 只有拥有admin权限的才能访问public String secureInfo() {return "这是受保护的信息";}
}

示例代码

以下是一些示例代码的汇总,供读者参考:

// SaTokenConfigDemo.java
@Configuration
public class SaTokenConfigDemo implements SaTokenConfig {@Overridepublic void config() {// 配置sa-token行为}
}// LoginController.java
@RestController
public class LoginController {@PostMapping("/login")public String login(@RequestParam("username") String username,@RequestParam("password") String password) {// 登录逻辑}
}// SecureController.java
@RestController
public class SecureController {@GetMapping("/secure")@SaCheckPermission("admin")public String secureInfo() {// 受保护的信息}
}

测试

启动应用,访问/login接口进行登录,然后尝试访问/secure接口,查看权限控制效果。

结语

通过以上步骤,我们已经成功地将sa-token集成到了Spring Boot项目中,实现了基本的登录和权限控制功能。sa-token的更多高级功能,如角色管理、权限细分等,可以通过阅读官方文档进一步学习。


在这里插入图片描述

相关文章:

Spring Boot 集成 sa-token 实践教程

Spring Boot 集成 sa-token 实践教程 sa-token 是一个轻量级且功能强大的权限认证框架&#xff0c;它基于Java语言&#xff0c;专为Java开发者设计&#xff0c;以简化权限管理的复杂性。在Spring Boot项目中集成sa-token&#xff0c;可以快速实现会话管理、权限控制等功能。本文…...

CSS:盒子模型

目录 ▐ box—model概述 ▐ 盒子的组成 ▐ 内容区 ▐ 内边距 ▐ 边框 ▐ 外边距 ▐ 清除浏览器默认样式 ▐ box—model概述 • CSS处理网页时&#xff0c;它认为每个标签都包含在一个不可见的盒子里. • 如果把所有的标签都想象成盒子&#xff0c;那么我们对网…...

django中的cookie与session

获取cookie request.COOKIE.GET 使用cookie response.set-cookie views.py from django.http import HttpResponse from django.shortcuts import render# Create your views here. def cookie_test(request):r HttpResponse("hello world")r.set_cookie(lan, py…...

环形链表(判断链表中是否有环)的讲解

一&#xff1a;题目 二&#xff1a;思路讲解 1&#xff1a;采用快慢指针的方法&#xff0c;一个fast指针一次移动两个节点&#xff0c;一个slow指针一次移动一个节点。 2&#xff1a;两个指针从头指针开始往后遍历&#xff0c;如果fast指针或者fast->next 有一个为空&…...

NLP(14)--文本匹配任务

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 步骤&#xff1a; * 1. 输入问题 * 2. 匹配问题库&#xff08;基础资源,FAQ&#xff09; * 3. 返回答案文本匹配算法&#xff1a; 编辑距离算法(缺点) 字符之间没有语义相似度; 受无关词/停用词影响大; 受语序影响大 Jaccar…...

MySQL——系统变量

使用 #最大连接用户数 select MAX_CONNECTIONS; #临时存放构成每次事务的SQL的缓冲区长度 select BINLOG_CACHE_SIZE; #SQL Server的版本信息 select VERSION; 查询结果...

「 网络安全常用术语解读 」漏洞利用预测评分系统EPSS详解

1. 概览 EPSS&#xff08;Exploit Prediction Scoring System&#xff0c;漏洞利用预测评分系统&#xff09; 提供了一种全新的高效、数据驱动的漏洞管理功能。EPSS是一项数据驱动的工作&#xff0c;使用来自 CVE 的当前威胁信息和现实世界的漏洞数据。 EPSS 模型产生 0 到 1&…...

理解python中的Iterator 和 Iterable 迭代器和可迭代对象

为什么有些对象可以用for … in 循环 我们先看一段代码&#xff1a; list [1, 2, 3, 4, 5]for i in list:logger.info(i)这代码定义了1个数组object list, 然后用 for … in 来遍历这个list 看起来合理没什么值得注意 但其实 for … in 后面对象还可以是个String for i in …...

C语言实现动态加载.so动态库,使用,错误捕获以及卸载

动态库 概述 动态库的扩展名是.so。 动态库是被加载&#xff0c;调用的时候是根据内存地址去调用&#xff0c;而不是将代码复制到文件中。 动态库可以同时被多个进程使用。 实战案例&#xff1a;构建 libmath.so 动态库 准备源文件 calc.h 定义加法&#xff1a;int add…...

《动手学深度学习》V2(11-18)

文章目录 十一、二 模型选择与过拟合和欠拟合1、模型的选择2、过拟合和欠拟合3、估计模型容量4、线性分类器的VC维5、过拟合欠拟合的代码实现 :fire:①生成数据集②定义评估损失③定义训练函数④三阶多项式函数拟合⑤线性函数拟合(欠拟合)⑤高阶多项式函数拟合(过拟合) 十三、权…...

web前端之excel转pdf、小黄人发送请求、base64、jspdf、xlsx

MENU 前言方案一方案二结束语 前言 在前端将Excel转换为PDF有多种方案&#xff0c;本文介绍两种简单方案。 方案一 使用jspdf库&#xff0c;先将Excel文件转成Base64格式&#xff0c;然后再使用jspdf库将其转换为PDF格式&#xff0c;最后使用saveAs函数下载PDF文件。 步骤一: 安…...

【面试题】音视频流媒体高级开发(2)

面试题6 衡量图像重建好坏的标准有哪些&#xff1f;怎样计算&#xff1f; 参考答案 SNR&#xff08;信噪比&#xff09; PSNR10*log10((2n-1)2/MSE) &#xff08;MSE是原图像与处理图像之间均方误差&#xff0c;所以计算PSNR需要2幅图像的数据&#xff01;&#xff09; SSIM…...

数据与结构--堆

堆 堆的概念 堆&#xff1a;如果有一个关键码的集合K{k0,k1,k2,…,kn-1}&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足ki<k2i1且ki<k2i2&#xff08;或满足ki>k2i1且ki>k2i2&#xff09;&#xff0c;其中i0,1,2,…...

Github的使用教程(下载项目、寻找开源项目和上传项目)

根据『教程』一看就懂&#xff01;Github基础教程_哔哩哔哩_bilibili 整理。 1.项目下载 1&#xff09;直接登录到源码链接页或者通过如下图的搜索 通过编程语言对搜索结果进一步筛选。 如何去找开源项目&#xff1a;(Github 新手够用指南 | 全程演示&个人找项目技巧放…...

Linux-线程概念

1. 线程概念 线程&#xff1a;轻量级进程&#xff0c;在进程内部执行&#xff0c;是OS调度的基本单位&#xff1b;进程内部线程共用同一个地址空间&#xff0c;同一个页表&#xff0c;以及内存中的代码和数据&#xff0c;这些资源对于线程来说都是共享的资源 进程&#xff1a;…...

js的桶排序

桶排序&#xff08;Bucket Sort&#xff09;是一种分布式排序算法&#xff0c;它将元素分散到一系列桶中&#xff0c;然后对每个桶中的元素进行排序&#xff0c;并将所有的桶合并起来得到最终的排序结果。桶排序适用于输入的元素均匀分布在一个范围内的情况&#xff0c;它的时间…...

解决ubuntu无法上网问题

发现是网络配置成了Manual手动模式&#xff0c;现在都改成自动分配DHCP模式 打开后&#xff0c;尝试上网还是不行&#xff0c;ifconfig查看ip地址还是老地址&#xff0c;怀疑更改没生效&#xff0c;于是重启试试。 重启后&#xff0c;ip地址变了&#xff0c;可以打开网页了 …...

使用nvm管理多版本node.js

使用nvm&#xff08;Node Version Manager&#xff09;安装Node.js是一个非常方便的方法&#xff0c;因为它允许你在同一台机器上管理多个Node.js版本。以下是使用nvm安装Node.js的基本步骤&#xff1a; Linux 安装nvm 根据你的操作系统&#xff0c;安装命令可能会有所不同。以…...

推导 模型矩阵的逆转置矩阵求运动物体的法向量

一个物体表面的法向量如何随着物体的坐标变换而改变&#xff0c;取决于变换的类型。使用逆转置矩阵&#xff0c;可以安全地解决该问题&#xff0c;而无须陷入过度复杂的计算中。 法向量变化规律 平移变换不会改变法向量&#xff0c;因为平移不会改变物体的方向。 旋转变换会改…...

定时任务的几种实现方式

定时任务实现的几种方式&#xff1a; 1、JDK自带 &#xff08;1&#xff09;Timer&#xff1a;这是java自带的java.util.Timer类&#xff0c;这个类允许你调度一个java.util.TimerTask任务。使用这种方式可以让你的程序按照某一个频度执行&#xff0c;但不能在指定时间运行。…...

开源AI视频背景处理神器:obs-backgroundremoval终极指南

开源AI视频背景处理神器&#xff1a;obs-backgroundremoval终极指南 【免费下载链接】obs-backgroundremoval An OBS plugin for removing background in portrait images (video), making it easy to replace the background when recording or streaming. 项目地址: https:…...

如何用Perplexity秒级获取NCBI/UniProt/PDB关联知识?——生物学家正在悄悄使用的4层语义穿透法

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;如何用Perplexity秒级获取NCBI/UniProt/PDB关联知识&#xff1f;——生物学家正在悄悄使用的4层语义穿透法 Perplexity 不是传统搜索引擎&#xff0c;而是面向科研语义网络的推理型知识代理。当输入一个…...

Visual C++运行库终极修复指南:如何3步解决95%的DLL缺失问题?

Visual C运行库终极修复指南&#xff1a;如何3步解决95%的DLL缺失问题&#xff1f; 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist Visual C运行库是Windows系统…...

大麦网Python抢票脚本终极指南:告别手速焦虑,轻松获取心仪门票

大麦网Python抢票脚本终极指南&#xff1a;告别手速焦虑&#xff0c;轻松获取心仪门票 【免费下载链接】DamaiHelper 大麦网演唱会演出抢票脚本。 项目地址: https://gitcode.com/gh_mirrors/dama/DamaiHelper 还在为心仪演唱会门票秒光而烦恼吗&#xff1f;还在为黄牛高…...

智能视频转PPT:3分钟实现视频内容自动提取的完整方案

智能视频转PPT&#xff1a;3分钟实现视频内容自动提取的完整方案 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 你是否曾为整理会议录像中的PPT内容而烦恼&#xff1f;手动暂停、截…...

照片直播如何实现?Android 通过 PTP/MTP 有线连接相机的技术方案

一、应用场景 在婚礼摄影、赛事记录、电商拍摄等业务中&#xff0c;客户往往希望&#xff1a; 摄影师按下快门&#xff0c;手机或平板立刻能看到照片。 常见传输方式的对比&#xff1a; 方式 问题 WiFi 延迟高、断连频繁 蓝牙 传输速度慢 有线 OTG ✅ 稳定、实时、低…...

Spring事件驱动:从@EventListener源码到高并发实践

1. Spring事件驱动机制入门 第一次接触Spring事件驱动时&#xff0c;我完全被各种Listener和Event搞晕了。直到在电商项目中遇到用户注册后需要执行多个后续操作的需求&#xff0c;才真正理解它的价值。想象一下&#xff0c;用户注册成功后需要发送短信、发放优惠券、记录行为日…...

多模态大模型 | GroundingDINO 架构解析与开放集检测实战

1. GroundingDINO的核心设计思想 GroundingDINO作为多模态大模型领域的创新成果&#xff0c;其最突出的特点是实现了视觉与语言模态的紧密融合&#xff08;Tight Fusion&#xff09;。这种设计理念贯穿于模型的三个关键组件&#xff1a;特征增强器&#xff08;Feature Enhancer…...

GO-Surf:基于神经特征网格的快速高保真三维表面重建技术解析

1. 项目概述&#xff1a;从点云到高保真表面的跨越在三维视觉与机器人领域&#xff0c;从一组稀疏的RGB-D图像序列中&#xff0c;快速、高质量地重建出物体的完整表面模型&#xff0c;一直是一个核心且富有挑战性的任务。传统的基于体素或点云的方法&#xff0c;要么在精度上难…...

告别数据壁垒:用ArcGIS Editor for OSM插件,5分钟搞定OSM数据下载与本地编辑

告别数据壁垒&#xff1a;用ArcGIS Editor for OSM插件&#xff0c;5分钟搞定OSM数据下载与本地编辑 在空间数据分析领域&#xff0c;OpenStreetMap&#xff08;OSM&#xff09;作为开放的全球地理数据库&#xff0c;已成为许多GIS从业者的重要数据来源。然而&#xff0c;传统O…...