视频上传,点播,权限是怎么实现的?
主要是通过阿里云服务实现
视频数据库表设计
名 | 注释 |
---|---|
id | 视频id |
course_id | 课程id |
chapter_id | 章节id |
title | 节点名称 |
video_source_id | 云端视频资源 |
video_original_name | 原始文件名称 |
sort | 排序字段 |
play_count | 播放次数 |
is_free | 是否可以试听 (0收费 1 免费) |
duration | 视频时长 |
status | Empty未上传,Transcoding转码中,Normal正常 |
size | 视频源文件大小(字节) |
version | 乐观锁 |
gmt_create | 创建时间 |
gmt_modified | 更新时间 |
此项功能于service_vod模块中,后端主要提供以下API
- 上传视频到阿里云
- 根据视频id删除阿里云视频
- 删除多个阿里云视频
- 根据视频id获取视频凭证
视频上传
流程
视频删除
删除多个视频,在request中传入多个视频即可
视频凭证获取
阿里云OSS上传服务是怎么做的?
数据库设计
阿里云OSS主要用于上传头像,在数据库中设计一个头像阿里云地址
后端接口
- uploadOssFile 上传头像,返回头像阿里云地址(url)
项目中用redis做了什么?
首页缓存
首页中的数据更改不频繁,查询相对较多,所以在这里查询时引入Redis缓存(K:V键值对存储,数据类型是字符串)
- 引入redis到项目中
- 配置redis
- 在需要缓存的方法上加@Cacheable注解
存放验证码
在短信注册登录时,需要设置验证码过期时间,正好redis中可以设置键的过期时间,所以这里采用redis实现
- 客户端用户点击发送短信
- 服务端判断redis中是否有这个键,有则不做发送操作,没有就发送并将验证码放入redis中
注册功能是怎么做的?
手机号注册
- 发送短信服务(调用阿里云API)
注册流程(后端接口) - 判断手机号,密码,验证码,昵称是否为空
- 判断验证码是否正确
- 判断手机号是否重复
- 加密密码,封装用户对象,加入数据库
登录之后状态如何保持(访问不同的页面,如何确保登录状态)?
手机号登录流程
MD5特性,同一字段加密后相同
- 验证手机号和密码(密码先加密后验证)
- 返回jwtToken
微信登录流程
- 后端提供callback接口,获取扫码人的信息
流程
两种方式登录后,都会返回一个jwt,这是验证状态的关键,jwt中包含着用户信息.jwt由三部分构成,第一部分我们称它为头部(header),第二部分我们称其为载荷(payload, 类似于飞机上承载的物品),第三部分是签证(signature).
基于jwt的token验证、原理及流程
单点登录和OAuth2
单点登录(cookie,session),单点登录(Single Sign On),简称为 SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
传统登录 cookie session 应用于单台服务器
如果一定要用session呢?
分布式session
- 通过redis集中存储session
- session复制(session广播机制)
- nginx使同一客户端请求都落在同一服务器上
session默认过期时间30分钟
本项目中使用jwt+cookie来实现单点登录
OAuth2是什么?
OAuth2是针对特定问题的一种解决方案
OAuth2主要可以解决两个问题
- 开放系统间授权
- 分布式访问问题
登录状态的保持
- 在项目某个模块进行登录,登录之后,按照规则生成字符串,把登录之后用户信息包含到字符串里面,把字符串返回
- 可以把字符串通过cookie返回
- 把字符串通过地址栏返回
- 再去访问项目其他模块,每次访问在地址栏带着生成字符串,在访问模块里面获取地址栏字符串,根据字符串获取用户信息,如果可以获取到,就是已经登录
如何数据库中要将微信用户和手机注册用户关联,怎么做?
通过微信api中提供的唯一标志open_id作为共同列即可
订单功能是怎么做的?
主要负责后端接口部分和数据库设计
数据库表设计
订单表
订单支付表
后端提供接口
核心接口主要是两个,生成订单和订单支付,查询订单状态,生成二维码
- 根据课程id和用户id生成订单
- 生成二维码
- 使用map封装参数
- 发送httpclient,传递参数xml格式给微信支付提供的固定地址
- 得到请求后,用map集合获得返回数据
- 查询订单支付状态
- 封装参数
- 发送httpclient
- 得到请求返回内容
- 转成map返回
- 添加支付记录和更新状态
- map 查到订单号
- 根据订单号查到订单信息
- 更新订单状态
- 向支付表添加支付记录