论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
数据库
›
Mysql
›
mall :sa-token项目源码解析
mall :sa-token项目源码解析
王海鱼
论坛元老
|
2023-8-31 05:22:58
|
显示全部楼层
|
阅读模式
楼主
主题
1034
|
帖子
1034
|
积分
3102
目录
一、mall开源项目
1.1 来源
1.2 项目转移
1.3 项目克隆
二、Sa-Toekn框架
2.1 Sa-Token 简介
2.2 分布式后端项目的使用流程
2.3 分布式后端项目的使用场景
三、源码解析
3.1 集成与配置
3.1.1 导入依赖
3.1.2 添加配置
3.1.3 异常处理
3.1.4 存储用户信息
3.2 登录认证
3.2.1 配置黑白名单
3.2.2 登录业务代码解读
3.2.3 测试登录
3.3 角色认证
3.3.1
权限验证接口扩展
3.3.2 配置拦截器
3.3.3 测试角色
3.4 权限认证
3.4.1 配置拦截器
3.4.2 测试权限
四、总结
一、mall开源项目
1.1 来源
mall学习教程
,架构、业务、技术要点全方位解析。mall项目(
50k+star
)是一套电商系统,使用现阶段主流技术实现。涵盖了SpringBoot 2.3.0、MyBatis 3.4.6、Elasticsearch 7.6.2、RabbitMQ 3.7.15、Redis 5.0、MongoDB 4.2.5、Mysql5.7等技术,采用Docker容器化部署。
项目github地址:
mall开源项目
1.2 项目转移
可以把github上的项目转移到gitee上,方便克隆到idea。
具体步骤如下:
1.3 项目克隆
由于github部署在国外,虽然idea也支持从github上拉取,但是克隆速度太慢,所以才推荐上述导入gitee后在克隆项目到idea。
具体的克隆步骤过于简单和常规化,读者可自行完成,或百度一下~
二、Sa-Toekn框架
2.1 Sa-Token 简介
Sa-Token
是一个轻量级 Java 权限认证框架,主要解决:
登录认证
、
权限认证
、
单点登录
、
OAuth2.0
、
分布式Session会话
、
微服务网关鉴权
等一系列权限相关问题。
Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权。
功能概览图如下:
sa-token开发文档地址:
框架介绍 (sa-token.cc)
2.2 分布式后端项目的使用流程
下图是结合项目经历,外加百度查找资料,自行总结的基本使用流程。
sa-token的使用流程图如下:
2.3 分布式后端项目的使用场景
下图是结合项目经历,外加百度查找资料,自行总结的基本使用场景。
sa-token的使用场景图如下:
三、源码解析
看源码自我总结出来的看新项目时的基本步骤,首先先看集成和配置,在从业务的角度来分析,结合集成的框架和组件,来依次剥削系统的架构。
解析内容:
下方的解析内容大部分在图中解释,外面就不做过多的阐述。
3.1 集成与配置
直接拿源码分析,只分析与sa-token有关的部分,其它部分读者请,自行看源码分析。
项目启动:
只需要启动mall-tiny-sa-token模块的部分即可。
启动所需:
启动mysql5的服务,创建数据库,并导入表(sql文件位置在,项目同级目录的document文件夹里)。
ps:
记得修改数据库连接的配置信息。
3.1.1 导入依赖
在pom文件中导入sa-token的相关依赖。
3.1.2 添加配置
在application.yml中添加sa-token的相关配置,项目支持前后端分离项目,关闭从
cookie
中读取
token
,改为从
head
中读取
token
的配置。
3.1.3 异常处理
对于处理未登录的、没有权限的、没有角色的异常,需要全局处理一下。
拿登录来做个小例子:由于未登录状态下访问接口,
Sa-Token
会抛出NotLoginException异常,此时会根据自定义的返回信息,返回状态码401和响应信息未提供token(异常处理的结果信息)。
3.1.4 存储用户信息
有两个用户,admin用户具有ROLE_ADMIN角色,macro用户具有ROLE_USER角色。
ps:
模拟数据库两张表的关联信息是根据id来关联的,也就是给用户分配角色。
3.2 登录认证
3.2.1 配置黑白名单
在管理系统中,除了登录接口,基本上都需要登录认证,在 sa-token中使用路由拦截鉴权是最方便的,也就是说给sa-token配置拦截器,实现WebMvcConfigurer接口,配置黑白名单。
ps:
自定义的白名单是从application.yml文件中获取到的信息。
3.2.2 登录业务代码解读
1.首先是控制层, 在UmsAdminController中添加一个登录接口login。
2.接着业务层, 在UmsAdminServiceImpl添加登录的具体逻辑,先验证密码,然后调用StpUtil.login(adminUser.getId())即可实现登录。
3.2.3 测试登录
方式一:
使用Postman测试
方式二:
使用swagger接口文档测试(建议使用,以及编写好,直接访问即可测试,访问地址为:
Swagger UI
),由于已经拿到token,就不做重复测试了,直接测另一个接口,
查询当前登录状态
的接口。
3.3 角色认证
紧接上文,我来实现一下吧!对于角色认证也就是定义好一套访问接口的规则,比如ROLE-ADMIN角色可以访问/brand下的所有资源,而ROLE_USER角色只能访问/brand/listAll下的资源。
配置全局异常
:见副标题3.1.3有所描述,不做过多陈诉。
当用户不是被允许的角色访问时,Sa-Token会抛出NotRoleException异常。
3.3.1
权限验证接口扩展
扩展 sa-token的StpInterface接口,重写方法来返回用户的角色名称和角色权限列表。
由于StpInterfaceImpl实现了StpInterface接口,重写了里面的方法。所以在SaTokenConfig的配置文件中的StpUtil.checkRole("ROLE_ADMIN")才能匹配到模拟的数据库的角色信息。权限信息也是同理,不一一列举了。
3.3.2 配置拦截器
在拦截器中配置路由规则,ROLE_ADMIN角色可以访问所有路径,而ROLE_USER只能访问/brand/listAll路径。
3.3.3 测试角色
对于 admin用户具有ROLE_ADMIN角色,macro用户具有ROLE_USER角色 。
使用admin账号访问/brand/{id}接口可以正常访问
使用macro账号访问/brand/{id}接口无法正常访问,返回code为403
这里就不对admin进行测试展示了,下方是对macro用户进行测试,查看没有权限的效果。
3.4 权限认证
当给
角色分配好权限
,然后给
用户分配好角色
后,用户就拥有了这些权限。
对于权限认证,也可以为每个
接口分配不同的权限
,拥有该权限的用户就可以访问该接口。
配置全局异常
:见副标题3.1.3有所描述,不做过多陈诉。
用户无权限访问时,
Sa-Token
会抛出NotPermissionException异常。
3.4.1 配置拦截器
给拦截器
配置路由规则
,admin用户可以访问所有路径,而macro用户只有读取的权限,没有写、改、删的权限。
3.4.2 测试权限
对于 admin用户可以访问所有路径,而macro用户只有读取的权限,没有写、改、删的权限。
使用admin账号访问/brand/delete接口可以正常访问
使用macro账号访问/brand/delete无法正常访问,返回code为403
这里就不对admin进行测试展示了,下方是对macro用户进行测试,查看没有权限的效果。
四、总结
本文是有我先从实际项目中获取需求,从而对SpringSecurity和Oath2的学习,结合源码来学习,到另一个项目由于鉴权已经部署在不同的ip,项目使用调用即可,项目中使用了
Sa-Token
是一个轻量级 Java 权限认证框架 ,看官网是看的明白,但是不懂如何入手,就有了此文,从mall开源项目中学习sa-token,感觉收获颇深,希望这篇文章对你们也会有所帮助。
后续我也会结合该框架学习一下其他的技术栈。
七夕~盈若安好,便是晴天
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
王海鱼
论坛元老
这个人很懒什么都没写!
楼主热帖
在Winform开发中,使用Async-Awati异步 ...
Vue 和 Django 前后端分离实践 (注册 ...
如何在 Vue 3 中使用<script lang=“t ...
C#依赖注入(直白明了)讲解 一看就会系 ...
一条SQL的执行原理
go中 for循环的坑
Vulnhub之Monkeybox详细测试过程(不同 ...
【Django】DRF开发中的一些技巧记录 ...
教务管理系统——数据库课程设计mysql+ ...
三篇学会MySQL数据库【查询详解】 ...
标签云
AI
运维
CIO
存储
服务器
快速回复
返回顶部
返回列表