- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
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开源项目 。
可以把github上的项目转移到gitee上,方便克隆到idea.
具体步骤如下:
由于github部署在国外,虽然idea也支持从github上拉取,但是克隆速度太慢,所以才推荐上述导入gitee后在克隆项目到idea.
具体的克隆步骤过于简单和常规化,读者可自行完成,或百度一下~ 。
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决: 登录认证 、 权限认证 、 单点登录 、 OAuth2.0 、 分布式Session会话 、 微服务网关鉴权 等一系列权限相关问题.
Sa-Token 目前主要五大功能模块:登录认证、权限认证、单点登录、OAuth2.0、微服务鉴权.
功能概览图如下:
sa-token开发文档地址: 框架介绍 (sa-token.cc) 。
下图是结合项目经历,外加百度查找资料,自行总结的基本使用流程.
sa-token的使用流程图如下:
下图是结合项目经历,外加百度查找资料,自行总结的基本使用场景.
sa-token的使用场景图如下:
看源码自我总结出来的看新项目时的基本步骤,首先先看集成和配置,在从业务的角度来分析,结合集成的框架和组件,来依次剥削系统的架构.
解析内容: 下方的解析内容大部分在图中解释,外面就不做过多的阐述.
直接拿源码分析,只分析与sa-token有关的部分,其它部分读者请,自行看源码分析.
项目启动: 只需要启动 mall-tiny-sa-token 模块的部分即可.
启动所需: 启动mysql5的服务,创建数据库,并导入表(sql文件位置在,项目同级目录的 document 文件夹里).
ps: 记得修改数据库连接的配置信息.
在 pom文件 中导入sa-token的相关依赖.
在 application.yml 中添加sa-token的相关配置,项目支持前后端分离项目,关闭从 cookie 中读取 token ,改为从 head 中读取 token 的配置.
对于处理未登录的、没有权限的、没有角色的异常,需要全局处理一下.
拿登录来做个小例子:由于未登录状态下访问接口, Sa-Token 会抛出 NotLoginException 异常,此时会根据自定义的返回信息,返回 状态码401 和响应信息 未提供token (异常处理的结果信息).
有两个用户, admin 用户具有 ROLE_ADMIN 角色, macro 用户具有 ROLE_USER 角色.
ps: 模拟数据库两张表的关联信息是根据id来关联的,也就是给用户分配角色.
在管理系统中,除了登录接口,基本上都需要登录认证,在 sa-token中使用路由拦截鉴权是最方便的,也就是说给sa-token配置拦截器,实现 WebMvcConfigurer 接口,配置黑白名单.
ps: 自定义的白名单是从 application.yml 文件中获取到的信息.
1.首先是控制层, 在 UmsAdminController 中添加一个登录接口 login .
2.接着业务层, 在 UmsAdminServiceImpl 添加登录的具体逻辑,先验证密码,然后调用 StpUtil.login(adminUser.getId()) 即可实现登录.
方式一: 使用 Postman 测试 。
方式二: 使用 swagger 接口文档测试(建议使用,以及编写好,直接访问即可测试,访问地址为: Swagger UI ),由于已经拿到token,就不做重复测试了,直接测另一个接口, 查询当前登录状态 的接口.
紧接上文,我来实现一下吧!对于角色认证也就是定义好一套访问接口的规则,比如 ROLE-ADMIN 角色可以访问 /brand 下的所有资源,而 ROLE_USER 角色只能访问 /brand/listAll 下的资源.
配置全局异常 :见副标题 3.1.3 有所描述,不做过多陈诉.
当用户不是被允许的角色访问时,Sa-Token会抛出 NotRoleException 异常.
扩展 sa-token的 StpInterface 接口,重写方法来返回用户的角色名称和角色权限列表.
由于 StpInterfaceImpl 实现了 StpInterface 接口,重写了里面的方法。所以在 SaTokenConfig 的配置文件中的 StpUtil.checkRole("ROLE_ADMIN") 才能匹配到模拟的数据库的角色信息。权限信息也是同理,不一一列举了.
在拦截器中配置路由规则, ROLE_ADMIN 角色可以访问所有路径,而 ROLE_USER 只能访问 /brand/listAll 路径.
对于 admin 用户具有 ROLE_ADMIN 角色, macro 用户具有 ROLE_USER 角色 .
admin
账号访问 /brand/{id}
接口可以正常访问 macro
账号访问 /brand/{id}
接口无法正常访问,返回 code
为 403
这里就不对admin进行测试展示了,下方是对 macro用户 进行测试,查看没有权限的效果.
当给 角色分配好权限 ,然后给 用户分配好角色 后,用户就拥有了这些权限.
对于权限认证,也可以为每个 接口分配不同的权限 ,拥有该权限的用户就可以访问该接口.
配置全局异常 :见副标题 3.1.3 有所描述,不做过多陈诉.
用户无权限访问时, Sa-Token 会抛出 NotPermissionException 异常.
给拦截器 配置路由规则 , admin 用户可以访问所有路径,而 macro 用户只有读取的权限,没有写、改、删的权限.
对于 admin 用户可以访问所有路径,而 macro 用户只有读取的权限,没有写、改、删的权限.
admin
账号访问 /brand/delete
接口可以正常访问 macro
账号访问 /brand/delete
无法正常访问,返回 code
为 403
这里就不对admin进行测试展示了,下方是对 macro用户 进行测试,查看没有权限的效果.
本文是有我先从实际项目中获取需求,从而对 SpringSecurity 和 Oath2 的学习,结合源码来学习,到另一个项目由于鉴权已经部署在不同的ip,项目使用调用即可,项目中使用了 Sa-Token 是一个轻量级 Java 权限认证框架 ,看官网是看的明白,但是不懂如何入手,就有了此文,从 mall 开源项目中学习sa-token,感觉收获颇深,希望这篇文章对你们也会有所帮助.
后续我也会结合该框架学习一下其他的技术栈.
七夕~盈若安好,便是晴天 。
最后此篇关于mall:sa-token项目源码解析的文章就讲到这里了,如果你想了解更多关于mall:sa-token项目源码解析的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在开发一个应用程序,它使用 OAuth - 基于 token 的身份验证。 考虑到我们拥有访问和刷新 token ,这就是流程的样子。 Api call -> intercepter append
如何取消标记此代码的输出? 类(class)核心: def __init__(self, user_input): pos = pop(user_input) subject = ""
当我使用命令 kubectl 时与 --token标记并指定 token ,它仍然使用 kubeconfig 中的管理员凭据文件。 这是我做的: NAMESPACE="default" SERVICE
我正在制作 SPA,并决定使用 JWT 进行身份验证/授权,并且我已经阅读了一些关于 Tokens 与 Cookies 的博客。我了解 cookie 授权的工作原理,并了解基本 token 授权的工作
我正在尝试从应用服务获取 Google 的刷新 token ,但无法。 日志说 2016-11-04T00:04:25 PID[500] Verbose Received request: GET h
我正在开发一个项目,只是为了为 java 开发人员测试 eclipse IDE。我是java新手,所以我想知道为什么它不起作用,因为我已经知道该怎么做了。这是代码: public class ecli
我正在尝试使用 JwtSecurityTokenHandler 将 token 字符串转换为 jwt token 。但它出现错误说 IDX12709: CanReadToken() returned
我已阅读文档 Authentication (来自 Facebook 的官方)。我仍然不明白 Facebook 提供的这三种访问 token 之间的区别。网站上给出了一些例子,但我还是不太明白。 每个
我的部署服务器有时有这个问题,这让我抓狂,因为我无法在本地主机中重现,我已经尝试在我的 web.config 中添加机器 key ,但没有成功远。 它只发生在登录页面。 我的布局:
我已经设法获得了一个简单的示例代码,它可以创建一个不记名 token ,还可以通过阅读 stackoverflow 上的其他论坛来通过刷新 token 请求新的不记名 token 。 启动类是这样的
如果我有以前的刷新 token 和使用纯 php 的访问 token ,没有 Google Api 库,是否可以刷新 Google Api token ?我在数据库中存储了许多用户刷新和访问 toke
我通过 Java 应用程序使用 Google 电子表格时遇到了问题。我创建了应用程序,该应用程序运行了 1 年多,没有任何问题,我什至在 Create Spreadsheet using Google
当我有一个有效的刷新 token 时,我正在尝试使用 Keycloak admin REST API 重新创建访问 token 。 我已经通过调用 POST/auth/realms/{realm}/p
我正在尝试让第三方 Java 客户端与我编写的 WCF 服务进行通信。 收到消息时出现如下异常: Cannot find a token authenticator for the 'System.I
在尝试将数据插入到我的 SQl 数据库时,我收到以下错误 System.Data.SqlServerCe.SqlCeException: There was an error parsing the
使用数据库 session token 系统,我可以让用户使用用户名/密码登录,服务器可以生成 token (例如 uuid)并将其存储在数据库中并将该 token 返回给客户端。其上的每个请求都将包
我最近注册了 Microsoft Azure 并设置了认知服务帐户。使用 Text Translation API Documentation 中的说明我能够使用 interactive online
我使用 IAntiforgery API 创建了一个 ASP.Net Core 2 应用程序。 这提供了一种返回 cookie 的方法。 客户端获取该 cookie,并在后续 POST 请求中将该值放
我正在使用 spacy 来匹配某些文本(意大利语)中的特定表达式。我的文本可以多种形式出现,我正在尝试学习编写一般规则的最佳方式。我有如下 4 个案例,我想写一个适用于所有案例的通用模式。像这样的东西
我无法理解 oauth 2.0 token 的原则处理。 我的场景是,我有一个基于 web 的前端后端系统,带有 node.js 和 angular 2。用户应该能够在此站点上上传视频。然后创建一些额
我是一名优秀的程序员,十分优秀!