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

imtoken官网地址 admin 2024-02-28 05:12 27 0

一、概述

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

tokenpocet官网

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

tokendata官网

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

token官网下载

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

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

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

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

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

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

二、框架使用体验

2.1 项目初始化配置

老三样。

引入pom依赖:

修改配置文件:

2.2 用户登录

自定义一个凭证类

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

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

开放认证接口:

2.3 权限验证

路由级别鉴权:

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

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

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

方法级别鉴权

验证用户是否登录

三、时间地点人物

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

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

3.1 什么时候用这个框架

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

整个流程应该是:

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

3.2 框架要提供哪些能力

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

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

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

3.3.1 用户认证

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

在这个场景中可能存在:

用户名+密码、用户名+密码+验证码、手机号+验证码、邮箱+验证码 ...... 这么多的登录方式。

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

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

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

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

3.3.2 用户授权

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

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

用户的资源又分为:

静态资源:

菜单、按钮等静态资源

文档、图片等静态资源

动态资源:

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

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

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

3.3.3 token管理

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

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

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

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

3.3.4 用户鉴权

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

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

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

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

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

四、小结

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

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

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

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

大致思路:

未完待续。。。