用户中心

用户中心
Abei用户中心
好用的工具收集
org.apache.commons commons-lang3 3.14.0 用于
企业做项目流程
- 需求分析
- 设计(概要设计、详细设计)
- 技术选型
- 初始化 / 引入需要的技术
- 写 Demo
- 写代码(实现业务逻辑)
- 测试(单元测试)
- 代码提交 / 代码评审
- 部署
- 发布
需求分析
- 登录 / 注册
- 用户管理(管理员)对用户的查询、修改
- 用户校验(仅VIP使用)
技术选型
前端:
- 三件套
- React
- 组件库 Ant Design
- Umi
- Ant Design Pro(现成的管理系统)
后端:
- Java
- Spring(依赖注入框架,帮助你管理Java对象,集成一些其他的内容)
- Spring MVC(web框架,提供接口访问,restful接口等能力)
- mybatis(Java 操作数据库的框架,持久层框架,对 jdbc 的封装)
- mybatis-plus(对 mybatis 的增强,不用写 sql 也能实现增删改查)
- Spring-Boot(==快速启动== / 快速集成项目。不用自己管理 spring 配置,不用自己整合各种框架)
- mysql
部署:服务器 / 容器(平台)
计划
- 初始化项目
- 前端初始化
- 初始化项目
- 引入组件库
- 框架介绍 / 瘦身
- 后端初始化
- 准备环境(MySQL之类的)
- 引入框架(整合框架)
- 前端初始化
- 登录 / 注册
- 前端
- 后端
- 用户管理(仅管理员可见)
- 前端
- 后端
第二次直播任务
- 用户库表设计
- 完成登录注册的前后端开发
- 完成用户管理后台的前后端开发
数据库设计
有哪些表(模型)?表中有哪些字段? 字段类型? 数据库字段添加索引? 表与表之间的关联?
用户表:
id(主键) varchar
userAccount 账号
userName 昵称 varchar
avatarUrl 头像 varchar
gender 性别 tinyint
password 密码 varchar
phone 电话 varchar
email 邮箱 varchar
isValid 是否有效 tinyint 0 1 (比如被封号)
- createTime 创建时间 datetime
- updateTime 更新时间 datetime
- isDelete 是否删除 tinyint
自动生成器的使用
MyBatisX 插件,自动根据数据库生成domain 实体对象,mapper(操作数据库对象),mapper.xml (定义了mapper对象和数据库的关联,可以在里面自己写SQL),service(包括常用的增删改查),serviceImpl(具体实现 service)
注册逻辑
- 用户在前端输入账户和密码、以及校验码(todo)
- 校验用户的账户、密码、校验密码,是否符合要求
- 账户不小于 4 位
- 密码不小于 6 位
- 账户不能重复
- 账户不包含特殊字符
- 对密码进行加密(密码千万不要以明文存储到数据库中)
- 向数据库插入用户数据
第三次直播
计划
- 开发完成后端登录功能 (单机登录)
- 开发后端用户的管理接口 (用户的查询 / 状态的更改)
- 开发前端用户登录注册功能
- 讨论如何校验用户(VIP可以使用)
登录接口
接收参数:用户账户、密码
请求类型:POST
请求参数很长时,不建议使用GET
请求体:JSON 格式的数据
返回值:用户信息(==脱敏==)
逻辑
- 校验用户的账户、密码、是否合法
- 非空
- 账户不小于 4 位
- 密码不小于 6 位
- 账户不包含特殊字符
- 校验密码是否输入正确,要和数据库中的密文密码去对比
- 用户信息脱敏,隐藏敏感信息,防止数据库中的字段泄露
- 我们要记录用户的登录态(session),将其存到服务器上(用后端 Springboot 框架封装的服务器 tomcat 去记录)
- 返回用户信息 (脱敏)
控制层 Controller 封装请求
@RestController 适用于编写 restful 风格的 api , 返回值默认为 JSON 类型
controller 层倾向于对请求参数本身的校验,不涉及业务逻辑本身(越少越好)
service 层是对业务逻辑的校验(有可能被 controller 之外的类调用)
如何知道是哪个用户登录了?
- 连接服务器端后,得到一个session1 状态,返回给前端
- 登陆成功后,得到了登陆成功的session,并且给该session设置一些值(比如用户信息),返回给前端一个设置cookie的“命令”
- 前端接收到后端的命令后,设置cookie,保存到浏览器内
- 前端再次请求后端的时候(相同的域名),在请求头中带上cookie去请求
- 后端拿到前端传来的cookie,找到对应的session
- 后端从session中可以取出基于该session存储的变量(用户的登录信息,登录名等等)
用户管理接口
- 查询用户
- 允许根据用户名查询
- 删除用户
前后端交互
前端需要向后端发送请求
前端 ajax 来请求后端
axios 封装了 ajax
request 是 ant design 项目又封装了一次
追踪 request 源码:用到了 umi 的插件、 requestConfig 是一个配置
代理
正向代理:替客户端发送请求
反向代理:替服务器接受请求
怎么做代理?
- Nginx 服务器
- Node.js 服务器
前端不再开发
此项目的教程时间有点久远了。所以很多东西都不一样了。我还是注重后端开发,所以前端的就不研究了。
末 - 直播内容
- 开发用户注销前端 / 后端
- 补充用户注册校验逻辑前端 / 后端
- 后端代码优化
- 前端代码优化
- 项目部署上线
- web 服务器
- 容器部署
- 绑定域名
后端优化
通用返回对象
目的:给对象补充一些信息,告诉前端这个请求在业务层面上是成功的还是失败的
json1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19{
"name": "abei"
}
//封装后
//成功
{
"code":1111 //自定义错误码,与自己的业务强相关
"data": {
"name": "abei"
},
"message": "OK"
}
//错误
{
"code":50001
"data": null
"message": "XXX地方发生了异常"
}- 自定义错误码
- 自定义返回信息
封装全局异常处理
- 定义业务异常类
- 相对 java 的异常类,支持更多字段
- 自定义构造函数,更灵活 / 快捷的设置字段
- 编写全局异常处理器
- 捕获代码中所有的异常,集中处理,让前端得到更详细的业务报错 / 信息
- 同时屏蔽掉项目框架本身的异常(不暴露服务器内部状态)
- 集中处理,比如记录日志
- 定义业务异常类
全局请求日志和登录校验
多环境
本地开发: localhost
多环境:指同一套项目代码在不同的阶段需要根据实际情况来调整配置并且部署到不同的机器上。
为什么需要?
- 每个环境互不影响
- 区分不同的阶段: 开发 / 测试 / 生产
- 对项目进行优化:
- 本地日志级别
- 精简依赖,节省项目体积
- 项目的环境 / 参数可以调整,比如 JVM 参数、
针对不同环境做不同事情。
多环境分类:
- 本地环境:(自己的电脑)localhost
- 开发环境:(远程开发)大家连同一台机器,为了大家开发方便
- 测试环境:(测试)开发 / 测试 / 产品,分为 性能测试 / 功能测试 / 系统集成测试,独立的数据库,独立的服务器
- 预发布环境:(体验服)和正式环境一致,正式数据库,更严谨,查出更多问题
- 正式环境(上线,公开对外访问的项目):尽量不要改动,保证上线前代码是”完美“运行
- 沙箱环境(实验环境):为了实验,测试新功能
后端多环境上线
SpringBoot项目,通过 application.yml 添加不同的后缀来区分配置文件
可以在启动项目
1 | java -jar .\user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod |