功能详细设计文档模板

单点登录功能详细设计文档 V1.0.0

1. 需求描述

此功能用于用户登录,当用户进入页面页面时,首先会加载出一段验证码以及账号文本框、密码文本框、是否记住密码文本框(这就是介绍系统功能的入口),当用户输入账号密码验证码并点击登录之后,会检查账户密码是否输入规范,这就涉及到文本框空校验以及密码是否符合要求等判断。
若都符合要求之后,系统就会开始校验用户输入的信息是否正确,若账户、密码、验证码等有一环输入错误的,界面就会做出响应的响应信息,并提示用户重新输入。
若输入正确,则需要判断用户是否点击了记住密码文本框,若选择记住密码,则下次记住密码时无需再输入密码就可以完成直接登录。若没有记住密码则反之。

2.功能拆分

1. 一个登录界面
2. 登录界面需要实时渲染验证码,需要集成Kaptcha技术。
3. 一个获取验证码的接口
4. 登录接口
5. 单点登录校验验证码时,需要将用户输入验证码与用户点击登录时页面验证码进行比对,由于界面验证码实时刷新,所以我们需要想办法存住验证码,所以我们需要集成redis将密码进行缓存

3.流程图

:白色是前端流程,蓝色是后端流程、

3.1页面加载时,获取验证码流程图

在这里插入图片描述

3.2登录流程图

在这里插入图片描述

4. 接口设计

4.1获取验证码接口

4.1.1接口

描述 获取验证码图片
请求地址 /admin/kaptcha /image-code/{imageCodeToken}
请求方式 GET
入参 参数 名称 类型 说明
imageCodeToken 验证码token String 必传,由前端生成,尽可能实现唯一
出参 参数 名称 类型 说明
验证码流数据 验证码图片 stream 一张图片的流数据

4.1.2处理逻辑

	1. 前提“集成kaptcha,引入jar,增加配置类
	2. 使用kaptcha的createText生成验证码字符串
	3. 以imgToken为key,text为value存入redis中,设置市场为300s
	4. 使用kaptcha的createImage生成验证码图片

4.2 获取验证码接口

4.2.1 接口

描述 登录接口
请求地址 /admin/login
请求方式 POST
入参 参数 名称 类型 说明
loginName 用户名 String 必传
loginName 用户名 String 必传
password 密码 String 必传
code 验证码 String 必传
imgToken 验证码token String 必传,用于从redis中捞取密码
出参 参数 名称 类型 说明
id 用户ID String
loginName 账号 String
name 昵称 String
token 登录凭证 String
resource 权限资源 List

4.2.2 处理逻辑

1.对传入的密码进行二次加密
2.验证码校验,根据传入的imageCodeToken,到redis中获取text,
	a)获取不到,报错返回:验证码已过期
	b)获取到后,与传入的imageCode作比较
		i.相等,继续往后
		ii.不相等,返回验证码错误
3.验证码校验通过后,删除redis中的imageCodeToken
4.登录校验,根据loginName获取用户信息
	a)获取不到,打日志:用户名不存在;报错返回:用户名不存在或密码错误
	b)获取到了,比较参数密码与数据库密码
		i.相等,登录校验成功
		ii.不相等,打日志:密码不对;报错返回:用户名不存在或密码错误
5.校验通过后,加载资源权限
6.组装用户登录信息LoginUserDto
7.生成唯一token,作为用户登录标识
8.以token为key,LoginUserDto为value,存入redis中
9.返回登录结果

5. 页面设计

一般包含几方面的内容:

		如何进入页面?
		页面有哪些操作元素?
		表单有哪些校验?
		点击按钮做什么操作?
		有哪些看不见的逻辑?
		跟后端有哪些交互? 

以及本功能为例,我们可以这样写:
一般包含几方面的内容:

		如何进入页面?点击连接进入
		页面有哪些操作元素?账号框、 密码框、 验证码框、 记住我按钮、 登录按钮
		表单有哪些校验?非空校验、密码正则
		点击按钮做什么操作?验证码文本框、调用后端接口
		有哪些看不见的逻辑?校验
		跟后端有哪些交互? 获取验证码接口、获取登录接口

6. 跑批设计

	包括跑批的时间、周期、处理逻辑、关联跑批等
	可以考虑下面几个问题:
	数据量是否很大,是否需要分页?
	跑批期间数据是否会更新?
	多个跑批之间是否会有先后?
	跑批失败如何重跑?

7. 数据库设计

	本次变更相关的数据库脚本

8. 安全设计

数据加密、接口加签验签、前后端参数校验、常见的漏洞处理、敏感数据处理。
以本次功能设计为例,这其中就涉及前端密码md5Salt加密

9. 性能设计

大数据量跑批,如每天的报表跑批
高访问量接口,如首页数据
大流量接口,如文件上传

猜你喜欢

转载自blog.csdn.net/shark_chili3007/article/details/120819161