项目总结-谷粒学院_第1页
项目总结-谷粒学院_第2页
项目总结-谷粒学院_第3页
项目总结-谷粒学院_第4页
项目总结-谷粒学院_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、项目总结-谷粒学院谷粒学院项目总结-谷粒学院(前后端分离)1、项目描述在线教育系统,分为前台网站系统和后台运营平台,B2c模式。前台用户系统包括课程、讲师、问答、文章几大大部分,使用了微服务技术架 构,前后端分离开发。后端的主要技术架构是:SpringBoot + SpringCloud + MyBatis-Plus + HttpCIient + MySQL + Maven+EasyExcel+ nginx 前端的架构是:Node.js + Vue.js +element-ui+NUXT+ECharts其他涉及到的中间件包括Redis、阿里云OSS、阿里云视频点播业务中使用了 ECharts做

2、图表展示,使用EasyExcel完成分类批量添加、注册分布 式单点登录使用了 JWT 项目前后端分离开发:后端采用SpringCloud微服务架构,持久层用的是MyBatis-Plus,微服务分库设计, 使用Swagger生成接口文档接入了阿里云视频点播、阿里云OSS系统分为前台用户系统和后台管理系统两部分:前台用户系统包括:首页、课程、名师、问答、文章。后台管理系统包括:讲师管理、课程分类管理、课程管理、统计分析、Banner 管理、订单管理、权限管理等功能。前端我是用vue进行开发的使用日ement-UI快速搭建模板样式使用了 Nuxt轻量级框架使用node成为js的一个运行环境,将前端部

3、署在node上为什么使用Nuxt呢? Nuxt有什么特点会让你使用?答:Nuxt也就是服务器渲染技术也可以充当静态站点引擎,它可以很好的解决 SEO问题,SEO简称(搜索引擎优化)比如说我前端显示一张图片,是通过ajax 异步请求得到数据的,抓取工具并不会等待异步完成后才对页面内容进行抓取。 而用服务器渲染技术,我们无需等待所有的js加载完后执行,而是在服务端中 通过node.js将我们查询出来的数据全部封装,然后一次性返回到前端获得更快 的内容到达时间,这就是NUXT的简单操作流程,而且都是在服务端中实现的。模块1Redis做缓存,什么样的数据适合使用Redis做缓存? 经常访问,但不经常修

4、改的数据;如主页 项目遇到的问题跨域问题:I跨域问题Ihttp:/localhost:p528/ 不一样http:/localhost 18001/17、跨域解决方式(1)在后端接口control)CrossOrigin 解决善之 public class EduLoginCo(2)使用网关解决(后Ivue不管路由跳转了几次created。方法只会执行一次解决方法:vue监听watch:$route(to,from)init()mybatisPuls的xml问题:打包时不会将xml文件也打包解决:_!-项目打包时会将java目录中的*.xml文件也进行打包src/main/java*/*.xm

5、lfalse酉己置文件:mybatis-plus.mapper-locations=classpath:com/atguigu/edu/mapper/xml/*.xml用f4呢5181丫接受数据必须用PostMapping提交否则报missnginx也会限制文件上传大小总结:服务器大多都会限制文件上传大小,上传前要设置 文件上传大小配置nginx上传文件大小,否则上传时会有413 (Request Entity Too Larg(月T开nginx主酉己置文件nginx.conf,找至!Jhttp,添加通过一个地埴去访问另外一个地址,这个过程中如果有三个地方任何一个不一样访问协议http htt

6、psip 地址192. 168.1. 1 172.11. 11.11盛口号95288001搭建或Fl前台系般环境使用用ITT他架搭建防台环境 联多端溶染拉术服务器官户褚缺点,不利于SEOaxios拦截器axios的拦截器特性request请求拦截当我们请求的时候会检查cookie中是否有token如果有就将token设置进request 的head当中,发送到服务端做单点登录的逻辑处理。response响应拦截做一个全局异常处理拦截每一个响应信息,判断状态码是否正常,如果返回报错状态码,用弹窗的 形式给用户展现友好的信息,如果正常就将response返回给后面业务使用。/创建axios实例co

7、nst service = axios.create(/baseURL: HYPERLINK /api /api, / api 的 base_url/baseURL: , HYPERLINK http:/localhost:8210 http:/localhost:8210, / api 的 base_urlbaseURL:33:9001,timeout:15000/请求超时时间)/ http request 拦截器erceptors.request.use(config =/debuggerif(cookie.get(guli_token)config.headerstoken= cooki

8、e.get(guli_token);) return config,err =return Promise.reject(err);)/ http response 拦截器erceptors.response.use(response =/debuggerif( response.data.code =28004)console.Iog(response.data.resultCode 是 28004)返回错误代码-1清除ticket信息并跳转到登录页面/debuggerwindow.location.href=7loginreturnelseif(response.data.code !=2

9、0000)25000 :订单支付中,不做任何提示if(response.data.code !=25000)Message(message: response.data.message | |error,typeierror,duration:5*1000) _return Promise.rejectCerror)只要报错前直接抛出错误,就不会执行成功方法 了elsereturn response;) ) , error = return Promise.reject(error) ); NPM包管理工具,类似Maven后晒使用spring boot来搭建项目的环境和部署(注解开发)。持久层

10、用的是MyBatis-Plus用到了自动填充逻辑删除(未实现)和乐观锁(未实现) 自动填充创建时间和修改时间还有每当数据修改时,会将修改时间自动填充 其他的就是调用mp的api实现增删改查嘛。使用Swagger生成接口文档后端采用SpringCloud微服务架构1)注册中心使用了 nacos将每个微服务注册进去。2)使用fegin来实现每个模块之间的远程调用。3)使用ribbon实现负载均衡,因为导入fegin-start的依赖会将ribbon也导入,因为 fegin 封装了 ribbono4)后台使用gateway网关,解决跨越问题,还有使用gateway的过滤器检测用户是否登 录,gate

11、way过滤器通过拦截request请求看head中是否用token,如果没有就不放通 过。Springsecurity实现登录和授权后端重点功能实现JWT令牌:(三部分)请求头、有效载荷、签名哈希 单点登录(SSO) : (token+cookie)用户先进行登录,如果登录成功我们将用户名用JWT随机生成字符串也就是token,再 将token放到cookie当中,当发送请求时通过axios拦截器来拦截我们的request请求, 如果cookie中有token,我们会将他放到request的head当中再进行发送,后端通过 request的head得到token然后用JWT解析得到用户名然后到

12、数据库查找对应的用户信 息,并且将用户信息返回给前端。session. setAttribusession. getAttribu集群部署分布式单点登录SSO(single signI实现登录Iservice-edu登录session. setAttribute(user user)复制session*单点登录三种常见方式:单一服务器模式登录(1)使用session对象实现*登录成功之后,把用户数据放到session里面第一种;session广播机制实现session复制第一种;session广播机制实现session复制*判断是否登录,从session获取数据,可以获取到登录 微信扫码登录:

13、第一步:先访问微信二维码的页面,在手机上确定登录后会调用我们的callback (回调 方法)得到一个code (相当于手机验证码)。第二步:利用httpclient携带上这个code请求一个微信固定的地址得到access_token(访问凭证)和openjd (微信号的唯一标识)。第三步:利用httpclient携带上access_token和open_id请求一个微信固定的地址,这时 微信返回以json形式的用户信息再用json转换工具自其转换为用户对象,我们会先判 断用户表的是否有重复的opend如果有就说明注册了,如果没有就将当的用户信息加 入到我们的用户表中,第四步:当插入成功后mp

14、会返回用户名给我们,我们将用户名使用JWT加密生成 token放到url参数的位置,重定向到首页。课程详细视频在线播放功能:上传视频:当我们在创建小节的时候向数据库保存的不是视频的地址,而是我们请求阿里云播放器提供的第三方接口的videoldo播放视频:通过小节id到数据库中查找对应的videold,然后通过videold再访问阿里云的第三方接口得到访问凭证通过videold和访问凭证播放视频。为什么通过videold和访问凭证播放视频?答:如果说通过视频地址访问视频,只能访问未加密视频,但是不能访问加密视频,如果用videold和访问凭证,就能访问加密视频。Autowiredprivate

15、VODProperties vodProperties;通过vid拿到视频凭证public R getVODvid( String vid)throws Exception(DefaultAcsClientclient=lnitObject.initVodClient(vodProperties.getKeyid(),vod Properties.getKeysecret(); 请求 GetVideoPlayAuthRequest request =new GetVideoPlayAuthRequest(); request.setVideold(vid); 响应 GetVideoPlayAu

16、thResponse response = null; response = client.getAcsResponse(request); 得到播放凭证 String playAuth = response.getPlayAuth(); 返回结果 return 。1().0165$州6(”获取凭证成功).|313(七匕113 playAuth); ) /* *流式上传接口 *param accessKeyldparam accessKeySecretparam titleparam fileName * param inputstream */ private static String t

17、estUploadStream(String accessKeyld, String accessKeySecret, String title, String fileName, Inputstream inputStream)UploadStreamRequest request =new UploadstreamRequest(accessKeyld, accessKeySecret, title, fileName, inputstream); UploadVideoImpI uploader =new UploadVideolmpl();UploadStreamResponse re

18、sponse = uploader.uploadStream(request); if( response.isSuccess() return response.getVideold();else如果设置回调URL无效,不影响视频上传,可以返回Videold同时会返回错误码。 其他情况上传失败时,Videold为空,此时需要根据返回错误码分析具体错误原因 return response.getVideold(); ) ) 微信支付功能:(建议将订单加入到redis当中缓存,设置过期时间) 根据用户id到订单表查询是否有和当前课程对应的消费的记录,如果有说明已购买和 立即观看 如果没有,会提醒

19、支付观看我们会转跳到二维码支付页面,然后将订单信息加入到订 单表 前端设置定时器每三秒访问我们的接口访问订单状态,如果支付成功将订单状态改为 支付成功,并且将支付信息保存的订单日志表中。前台热点信息,使用redis缓存:原理:设置常量key比如说如果我们要存课程的热点信息,那我们就将key设置course,每次 查询前使用key查询在redis中先查询是否存在信息,如果存在就直接从redis当中获取。从redis中获取的是二进制字节,然后利用对象流反序列化返回对象。如果redis中不存在,那么我们就向数据库中查询数据,先利用对象流将我们的对象序 列化成二进制字节,然后存入redis当中,这样下一次我们用就会直接从redis当中查询 了。如果进行序列化有就返第一次先访问re看是否有数据先集成 spring-boot-starter-data-redis 然后在查询的方法上打上*Cacheable(va

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论