给女朋友讲某宝是如何设计用户权限管理的(一)

给女朋友讲某宝是如何设计用户权限管理的(一),第1张

一、概述

java应用系统设计过程中,用户认证、用户授权、鉴权是绕不过去的话题。

如果这个权限管理的设计,没有做到与业务系统的隔离,拓展性不够强,很容易就会拖后腿。

这个问题应该做过开发的同学都会有所体会。

现在网络上的各种关于权限管理的框架比较主流的有 Apache Shiro,Spring Security,Sa-Token(新兴起的一个优秀框架)。

这里会有同学说,既然已经有这么多的成熟优秀的权限管理框架,为什么还有再给大家介绍这种实现思路。

在本人工作和学习的过程中,经常会使用这些优秀的权限管理框架。

但是,一旦是这些三方框架出现的异常和问题,想要排查,就比较麻烦。要么就是靠着百度大家的经验。要么就是猛扒代码,一点点去排查。

三方框架对于我们使用者来说,就像是一个黑盒。这一点一直让我觉得有点不顺畅。

同学们,谁不想要一个自己知根知底的的权限管理框架呢。

二、框架使用体验

21 项目初始化配置

Springboot老三样。

引入pom依赖:


修改配置文件:

22 用户登录

自定义一个凭证类


自定义一个凭证类认证器:

这个认证器很简单 就是默认admin 密码 123456 然后给与了固定的角色和全部的资源。实际应用中应该从数据库中获取到用户的权限 并组织返回的securityAuthority。


开放认证接口:

23 权限验证

路由级别鉴权:

不用做其他额外的配置 只需要打上@HasUrl 就会获取到Controller层的当前url地址,并校验用户是否有访问该url的权限。

并将解析后的用户信息放到方法的SecurityAuthority参数中

在第一步用户登录时,默认给了SecurityResallUrlRes() ,则配置了 / 的url访问权限。


方法级别鉴权


验证用户是否登录

三、时间地点人物

想要描述一个事情,都是将时间地点人物介绍完,才能吧事情描述清楚。

介绍这个设计思路也需要介绍前提:

31 什么时候用这个框架

显然,如果系统需要提供用户认证、用户授权、用户鉴权的时候,就需要有一个权限管理的模块。

整个流程应该是:

用户认证 --> 颁发token(用户授权) --> 用户鉴权 --> token回收

32 框架要提供哪些能力


以上能力老生常谈就是最基础的权限管理。

33 框架应该有哪些抽象组件

这个问题是面向对象开发的java程序员必须要好好思考的问题,就是当你接到一个需求时,如何以面向对象的思维来分析和设计程序来完成需求。

331 用户认证

用户认证,最最常见的场景就是用户名密码登录。


在这个场景中可能存在:
用户名+密码、用户名+密码+验证码、手机号+验证码、邮箱+验证码 这么多的登录方式。

而通常来验证这些登录信息是否合法,一般都是要去数据库中读取用户的注册信息来完成认证。

这个场景下可以抽象出来的类有:

1 凭证类:用户名+密码、用户名+密码+验证码、手机号+验证码、邮箱+验证码

2 凭证类验证器:用来验证用户上传的凭证是否是合法的。

332 用户授权

当用户完成认证凭证验证后,服务器应该返回一个用户的口令(token),给用户使用。

并且用户的token应该可以关联并携带出用户绑定的所有资源权限,和角色、部门、岗位等等信息。

用户的资源又分为:

静态资源:

菜单、按钮等静态资源

文档、等静态资源

动态资源:

对某种资源的CURD权限:如 是否可以对 sys_user表数据进行CURD。


这个场景下可以抽象出来的类:


其中的岗位和部门,有些权限管理框架中没有,有的或许有一个,这里不纠结这个问题,无论是部门还是岗位,其实都是提供了一种权限判断的维度,类型给用户打上一种标签。

333 token管理

生成用户token后,所有的token需要管理起来。可以用来统计和维护。

所以需要将上一步获取到的用户权限描述类的信息与token建立一种映射关系。从而可以通过token获取到用户的各种信息。

这个场景可以抽象出来的类:

Token管理类:用来管理所有生成的token。并建立用户信息与token的关联关系。

334 用户鉴权

当用户通过用户认证和用户授权后,就获取到了他的token口令。

每次用户来访问服务资源时,都需要携带token,当服务器收到请求后,需要通过token获取到用户的所有的权限信息,来判断用户是否可以访问当前资源。

这个场景似乎没有可以抽离出来的类,而是我们要找到一种用户鉴权的方案。

这里,根据以往的经验,基于Spring的AOP切面编程应该是对使用者最友好的方式

所以这里总结下我们需要鉴权的类型:

四、小结

上面铺垫了那么些,其实只是想让大家能跟笔者有一个相同的认知。

先梳理下上面总结出来的类。

凭证类、凭证类验证器、token生成器、token管理器。

以及,基于AOP实现的用户鉴权方案。

大致思路:


未完待续。。。

同一个局域网 就简单了
1 右击 要共享的文件夹
2 在打开的选择菜单里 找到 共享和安全(H)
3在d出的对话框中 找到 “网络安装向导”蓝体字 点击下一步 下一步
下一步 计算机描述 后面的框 填写你的 电脑 名称 顺便 写 然后在继续 下一步 下一步 下一步 下一步 下一步
最后那个 选择对话框 点第最后一个 然后 下一步 完成 就 ok了


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/12808652.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2025-08-27
下一篇2025-08-27

发表评论

登录后才能评论

评论列表(0条)

    保存