单点登录详细设计 V1.0.0
单点登录详细设计 V1.0.0
变更历史 | |||
---|---|---|---|
版本 | 内容 | 修改人 | 日期 |
1.0.0 | 单点登录详细设计 | 甲蛙 | 2099-01-01 |
1 需求描述
这里可以简要描述需求,或放入需求文档的链接*,方便随时查看详细设计对应的需求*
2 功能拆分
根据需求拆分成一个一个的功能点,功能点可以是界面,接口,集成某个技术等等。
单点登录功能点示例:
- 一个登录页面制作,界面
- 登录页面初始显示验证码,一个验证码接口
- 登录功能,一个登录接口
- 单点登录需要分布式缓存,集成redis
- 登录校验AOP
3 流程图
常见的有基本流程图,时序图,可以从前端串到后端,用不同的颜色表示。
3.1 生成验证码流程图
3.2 单点登录流程图:
4 接口设计
接口信息:描述、地址、请求方式、入参、出参。
处理逻辑:尽可能写得详细,读哪些配置,查哪张表哪个字段,甚至是写伪代码
4.1 验证码接口
4.1.1 接口信息
描述 | 获取验证码图片 | |||
---|---|---|---|---|
地址 | /admin/kaptcha /image-code/{imageCodeToken} | |||
请求方式 | GET | |||
入参 | 参数 | 名称 | 类型 | 说明 |
imageCodeToken | 验证码token | String | 必填前端生成随机字符串 | |
出参 | 参数 | 名称 | 类型 | 说明 |
验证码图片 | 验证码图片 | 图片 | 返回一张图片 |
4.1.2 处理逻辑
- 前提:集成Kaptcha,引入Jar包,增加配置类
- 使用Kaptcha自带的方法createText生成字符串text
- 以imageCodeToken为key,以text为value,存入redis中,300秒过期
- 使用Kaptcha自带的方法createImage,将text生成一张图片,并返回
4.2 登录接口
4.2.1 接口信息
描述 | 获取验证码图片 | |||
---|---|---|---|---|
地址 | /admin/kaptcha /image-code/{imageCodeToken} | |||
请求方式 | GET | |||
入参 | 参数 | 名称 | 类型 | 说明 |
loginName | 用户名 | String | 必填 | |
password | 密码 | String | 必填 | |
imageCode | 验证码 | String | 必填 | |
imageCodeToken | 验证码token | String | 必填 | |
出参 | 参数 | 名称 | 类型 | 说明 |
id | 用户ID | String | ||
loginName | 用户名 | String | ||
name | 昵称 | String | ||
token | 登录凭证 | String | 所有请求都带此token | |
resources | 权限资源 | List | 隐藏显示界面/按钮 |
4.2.2 处理逻辑
- 对传入的密码进行二次加密
- 验证码校验,根据传入的imageCodeToken,到redis中获取text,
a) 获取不到,报错返回:验证码已过期
b) 获取到后,与传入的imageCode作比较
i. 相等,继续往后
ii. 不相等,返回验证码错误
- 验证码校验通过后,删除redis中的imageCodeToken
- 登录校验,根据loginName获取用户信息
a) 获取不到,打日志:用户名不存在;报错返回:用户名不存在或密码错误
b) 获取到了,比较参数密码与数据库密码
i. 相等,登录校验成功
ii. 不相等,打日志:密码不对;报错返回:用户名不存在或密码错误
- 校验通过后,加载资源权限
- 组装用户登录信息LoginUserDto
- 生成唯一token,作为用户登录标识
- 以token为key,LoginUserDto为value,存入redis中
- 返回登录结果
5 页面设计
一般包含几方面的内容:
如何进入页面?
页面有哪些操作元素?
表单有哪些校验?
点击按钮做什么操作?
有哪些看不见的逻辑?
跟后端有哪些交互?
5.1 登录页面
5.1.1 页面展示
5.1.2 处理逻辑
- 页面初始化后,调用验证码图片接口,显示验证码图片
- 用户名、密码、验证码非空校验
- 点击登录按钮时,对密码进行第一次加密,加密后再进行传输,调用登录接口
a) 登录成功,跳转到欢迎页面
b) 登录失败,弹出失败提示,刷新图片验证码
6 跑批设计
包括跑批的时间、周期、处理逻辑、关联跑批等
可以考虑下面几个问题:
数据量是否很大,是否需要分页?
跑批期间数据是否会更新?
多个跑批之间是否会有先后?
跑批失败如何重跑?
7 数据库设计
本次变更相关的数据库脚本
8 安全设计
数据加密、接口加签验签、前后端参数校验、常见的漏洞处理、敏感数据处理
9 性能设计
大数据量跑批,如每天的报表跑批
高访问量接口,如首页数据
大流量**接口,如文件上传
License:
CC BY 4.0