springboot引入mangodb依赖坐标:在spring-boot集成条件下,使用mongodb的DAO层开发. swagger查看接口文档,请求地址:http://localhost:31001/swagger-ui.html 本项目前端使用的框架开发库:Element,一套为开发者.设计师准备的基于 Vue 2.0 的桌面端组件库. 1 自定义条件查询 1.1 需求分析 查询条件如下:站点Id:精确匹配模板Id:精确匹配页面别名:模糊匹配... 1.2 服务端 1.2.1 Dao 使用…
1 Vue.js与Webpack研究 开发版的浏览器:https://www.google.cn/intl/zh-CN/chrome/dev/ 前端的开发框架:微服务项目开发学成在线_Vue.js与Webpack 使用了webpack之后就不能采用传统js的调试方法在chrome中打断点.1.在webpack.config.js中配置: devtool: 'eval‐source‐map', 16-CMS前端工程创建-导入系统管理前端工程  2.1 导入系统管理前端工程 CMS系统使用Vue-c…
实现退出 用户退出要以下动作: 1.删除redis中的token 2.删除cookie中的token controller内定义 spring securety config内放行 对这个url放行 执行这两步骤 service内加一个删除redis值的方法 主方法调用 删除cookie方法,把有效期改为0就是删除 主方法调用 增加一个退出失败的枚举 删除redis的令牌,可能这个key值已经过期了呢.所以这里删除后,就直接返回true就可以 controller内直接调用删除的方法, 不需要抛…
这是轮播图的原始文件 运行门户需要把 nginx启动起来 单独运行轮播图.把里面的css的引用都加上网址的url 这就是单独访问到的轮播图的效果 轮播图模板的地址: 阶段5 3.微服务项目[学成在线]·\day04 页面静态化\代码\index_banner.ftltest-freemarker的服务内.模板的html文件,复制过来.然后改了名字后缀叫做index_banner.ftl FreemarkerController内 新加一个方法 返回为轮播图的模板地址 http://localho…
提供了基于脚手架封装好的前端工程 H:\BaiDu\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\阶段5 3.微服务项目[学成在线]·\day02 CMS前端开发\资料\xc-ui-pc-sysmanage.7z _all的是完整的.不带all的是手写的第一部分的 解压出来 ,这里应包括了所有的依赖 build构建工程相关的js webStorm打开 config里面有一些配置文件 index.js里面会设置代理 工程启动后对外暴露一个接口11000 sysConfig.js自己…
2.2 Oauth2认证 2.2.1 Oauth2认证流程 第三方认证技术方案最主要是解决认证协议的通用标准 问题,因为要实现 跨系统认证,各系统之间要遵循一定的 接口协议. OAUTH协议为用户资源的授权提供了一个安全的.开放而又简易的标准.同时,任何第三方都可以使用OAUTH认 证服务,任何服务提供商都可以实现自身的OAUTH认证服务,因而OAUTH是开放的.业界提供了OAUTH的多种实 现如PHP.JavaScript,Java,Ruby等各种语言开发包,大大节约了程序员的时间,因而OAU…
1.1 用户认证与授权 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进行学习.如何去记录学生的学习过程 呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什么课程:如果用户要购 买课程也需要知道用户的身份信息.所以,去管理学生的学习过程最基本的要实现用户的身份认证. 什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问.常见的用户身份认 证表现形式有:用户名密码登录,指纹打卡等方式. 什么是用户…
05-CMS需求分析-什么是CMS 什么是CMS?CMS (Content Management System)即内容管理系统,不同的项目对CMS的定位不同.CMS有哪些类型? 每个公司对每个项目的CMS定位不同,CMS基本上分为:针对后台数据内容的管理.针对前端页面的管理.针对样式风格的管理等 . 本项目CMS的定位是什么? 本项目作为一个大型的在线教育平台,对CMS系统的定位是对各各网站(子站点)页面的管理,主要管理由于运营需要而经常变动的页面,从而实现根据运营需要快速进行页面开发.上线的需…
2 Feign远程调用 在前后端分离架构中,服务层被拆分成了很多的微服务,服务与服务之间难免发生交互,比如:课程发布需要调用 CMS服务生成课程静态化页面,本节研究微服务远程调用所使用的技术. 下图是课程管理服务远程调用CMS服务的流程图: 1.cms服务将自己注册到注册中心. 2.课程管理服务从注册中心获取cms服务的地址. 3.课程管理服务远程调用cms服务. 2.1 Ribbon 2.1.1 Ribbon介绍 Ribbon是Netflix公司开源的一个负载均衡的项目(https://git…
我们先搭建单机环境 govern是治理的意思, 这样就把工程创建好了 创建包 创建SpringBoot的启动类. 在父工程里面已经确定了Spring Cloud的版本了.相当于锁定了版本 接下里只需要在子工程内引入eureka的包.那么这一些列相关的依赖jar包就自动的引进来.并且版本也 不用你管了.因为父工程已经锁定了Sring Cloud的版本. 引入后刷新一下包 spring cloud全部是基于Spring boot进行的开发,所以我们引入了Spring Cloud 后,springBo…
cms和课程的微服务重启 从数据库内找一条数据 进入到了断点 拼装课程信息 ,然后进行远程调用 抛出异常 可能是开了两个cms服务的事,负载均衡 到了另外一个服务里面 ,关掉一个 把02关掉,重启cms01 eureka服务也重启下,因为刚才关掉了一个cms的服务 如果要远程调用,需要增加无参构造方法.所以必须在这里个里面增加一个无参的构造方法 再次重启 课程的服务 远程调用后页面返回了null 在cms服务里面加断点测试 更新的时候id为null了. cmsPage这个对象为空了 这里变量写错…
4 课程详情页面静态化 4.1 静态页面测试 4.1.1 页面内容组成 我们在编写一个页面时需要知道哪些信息是静态信息,哪些信息为动态信息,下图是页面的设计图: 打开静态页面,观察每部分的内容. 红色表示动态信息,红色以外表示静态信息. 红色动态信息:表示一个按钮,根据用户的登录状态.课程的购买状态显示按钮的名称及按钮的事件. 包括以下信息内容: 1.课程信息 课程标题.价格.课程等级.授课模式.课程图片.课程介绍.课程目录. 2.课程统计信息 课程时长.评分.收藏人数 3.教育机构信息 公司名…
2.1.2 Ribbon测试 Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡.Java中远程调用的技术有很多,如: webservice.socket.rmi.Apache HttpClient.OkHttp等,互联网项目使用基于http的客户端较多,本项目使 用OkHttp. 现在要实现课程去服务去调用cms服务.调用放course服务就是客户端 在course服务里面 采用客户端负载均衡的方式来调用cms. 首先加入ribbon的包和okhttp的…
下面要完成  5.6两个步骤 3.3.4 资源服务授权 3.3.4.1 资源服务授权流程 资源服务拥有要访问的受保护资源,客户端携带令牌访问资源服务,如果令牌合法则可成功访问资源服务中的资 源,如下图: 上图的业务流程如下: 1.客户端请求认证服务申请令牌 2.认证服务生成令牌 认证服务采用非对称加密算法,使用私钥生成令牌. 3.客户端携带令牌访问资源服务 客户端在Http header 中添加: Authorization:Bearer 令牌. 4.资源服务请求认证服务校验令牌的有效性 资源服…
2.3 Spring security Oauth2认证解决方案 本项目采用 Spring security + Oauth2完成用户认证及用户授权,Spring security 是一个强大的和高度可定制的身 份验证和访问控制框架,Spring security 框架集成了Oauth2协议,下图是项目认证架构图: 1.用户请求认证服务完成认证. 2.认证服务下发用户身份令牌,拥有身份令牌表示身份合法. 3.用户携带令牌请求资源服务,请求资源服务必先经过网关. 4.网关校验用户身份令牌的合法,不…
1.进入页面,通过钩子方法请求服务端获取页面信息,并赋值给数据模型对象 2.页面信息通过数据绑定在表单显示 3.用户修改信息点击“提交”请求服务端修改页面信息接口 3.3.3 修改页面 3.3.3.1 编写page_edit页面 修改页面的布局同添加页面,可以直接复制添加页面,在添加页面基础上修改. 下边编写页面内容: 1.编写page_edit.vue 页面布局同添加页面,略. 2.配置路由 进入修改页面传入pageId import page_edit from '@/module/cms/…
点击页面查询按钮 ,报错.跨域问题. 前端端口是11000 请求后端的服务地址端口是31001 出现跨域 开始解决跨域 把前面带端口的地址 用变量代替 只有带/api/cms开头的就转发的服务端31001的端口 把/api替换成空字符串 测试 点击查询 数据库可以访问到了 后期会通过nginx去解决跨域的代理问题 export const page_list = (page,size,params) => { return http.requestQuickGet(apiUrl+'/cms/pa…
5.2 CMS页面预览测试 CMS已经提供了页面预览功能,课程预览功能要使用CMS页面预览接口实现,下边通过cms页面预览接口测试课 程预览的效果. 1.向cms_page表插入一条页面记录或者从cms_page找一个页面进行测试. 注意:页面配置一定要正确,需设置正确的模板id和dataUrl. 站点id用课程详情的这个站点id { "_id" : ObjectId("5b3469f794db44269cb2bff1"), "_class" :…
5 课程预览功能开发 5.1 需求分析 课程预览功能将使用cms系统提供的页面预览功能,业务流程如下: 1.用户进入课程管理页面,点击课程预览,请求到课程管理服务 2.课程管理服务远程调用cms添加页面接口向cms添加课程详情页面 3.课程管理服务得到cms返回课程详情页面id,并拼接生成课程预览Url 4.课程管理服务将课程预览Url给前端返回 5.用户在前端页面请求课程预览Url,打开新窗口显示课程详情内容 这是页面 预览的接口 静态化,然后把数据返回给浏览器 获取数据.获取模板,然后静态化…
3.2.1 技术需求 课程详情页面是向用户展示课程信息的窗口,课程相当于网站的商品,本页面的访问量会非常大.此页面的内容设 计不仅要展示出课程核心重要的内容而且用户访问页面的速度要有保证,有统计显示打开一个页面超过4秒用户就 走掉了,所以本页面的性能要求是本页面的重要需求. 本页面另一个需求就是SEO,要非常有利于爬虫抓取页面上信息,并且生成页面快照,利于用户通过搜索引擎搜索 课程信息. 3.2.2 解决方案 如何在保证SEO的前提下提高页面的访问速度 : 方案1: 对于信息获取类的需求,要想提…
2 新增课程 2.1 需求分析 用户操作流程如下: 1.用户进入“我的课程”页面,点击“新增课程”,进入新增课程页面 2.填写课程信息,选择课程分类.课程等级.学习模式等. 3.信息填写完毕,点击“提交”,课程添加成功或课程添加失败并提示失败原因. 需要解决的是在新增页面上输入的信息: 1.课程分类 多级分类,需要方便用户去选择. 2.课程等级.学习模式等这些选项建议是可以配置的. 页面效果如下: 课程分类 需要把数据显示出来 2.2 课程分类查询 2.2.1介绍 在新增课程界面需要选择课程所属…
RabbitMQ由Erlang语言开发,Erlang语言用于并发及分布式系统的开发,在电信领域应用广泛,OTP(Open Telecom Platform)作为Erlang语言的一部分,包含了很多基于Erlang开发的中间件及工具库,安装RabbitMQ需 要安装Erlang/OTP,并保持版本匹配,如下图: RabbitMQ的下载地址:http://www.rabbitmq.com/download.html Erlang的下载地址: https://www.erlang.org/downlo…
先静态化,并存储到gridFS 然后,发消息给MQ,MQ接收到消息通知给所有监听他的Cms Client. Cms client从gridFS读取页面下载到自己的服务 业务流程如下:1.管理员进入管理界面点击“页面发布”,前端请求cms页面发布接口.2.cms页面发布接口执行页面静态化,并将静态化页面(html文件)存储至GridFS中.3.静态化成功后,向消息队列发送页面发布的消息.页面发布的最终目标是将页面发布到服务器.通过消息队列将页面发布的消息发送给各各服务器.3.消息队列负责将消息发送…
增加删除链接 <el-button size="small" type="text" @click="del(page.row.pageId)">删除</el-button> cms.js定义调用服务端的方法 这里的删除一定要用requestDelete的方式. export const page_del = (id) => { return http.requestDelete(apiUrl+'/cms/page/…
RabbitMQ是什么,怎么使用我就不介绍了,大家可以到园子里搜一下教程.本篇的重点在于实现服务与服务之间的异步通信. 首先说一下为什么要使用消息队列来实现服务通信:1.提高接口并发能力.  2.保证服务各方数据最终一致.  3.解耦. 使用消息队列通信的优点就是直接调用的缺点,比如在直接调用过程中发生未知错误,很可能就会出现数据不一致的问题,这个时候就需要人工修补数据,如果有过这个经历的同学一定是可怜的,人工修补数据简直痛苦!!再比如高并发情况下接口直接挂点,这就更直白了,接口挂了,功能就挂了…
cms相当于客户端 配置客户端的信息 后面加逗号分隔开 50102表示向两台eureka服务上报服务,如果有一台死掉了 那么还可以上另外的一台去注册服务 直接把ip注册到eureka 启动类加注解 重启cms的服务.eureka的注册列表内 就可以看到cms的微服务了 eureka2也有了 课程管理也注册到微服务 先加入依赖.然后刷新包 启动类加注解 配置文件内 client端的配置 启动课程管理的微服务 日志级别改成info 因为启动控制台 输出了太多的信息 结束…
1 Eureka注册中心 1.1 需求分析 在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中 心来管理微服务信息. 为什么 要用注册中心? 1.微服务数量众多,要进行远程调用就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务的ip和 端口. 2.微服务会实时上报自己的状态,注册中心统一管理这些微服务的状态,将存在问题的服务踢出服务列表,客户 端获取到可用的服务进行调用. A要想调用B的服务就必须知道服务的地址 ip和端口…
修改认证服务的UserDetailServiceImpl类,下边的代码中 permissionList列表中存放了用户的权限, 并且将权限标识按照中间使用逗号分隔的语法组成一个字符串,最终提供给Spring security. 授权是SpringSecuriy的本职工作, 虽然可以在UserJwt里面扩充属性 UserJwt的构造方法的第三个参数就是权限. 自谦我们写的代码 权限暂时用的静态的 最终把权限转换成了字符串,放在了 UserJwt的构造方法的第三个参数上. 所以SpringSecur…
4 Zuul网关 4.1 需求分析 网关的作用相当于一个过虑器.拦截器,它可以拦截多个系统的请求. 本章节要使用网关校验用户的身份是否合法. 4.2 Zuul介绍 什么是Zuul? Spring Cloud Zuul是整合Netflix公司的Zuul开源项目实现的微服务网关,它实现了请求路由.负载均衡.校验过 虑等 功能. 官方:https://github.com/Netflix/zuul 什么是网关? 服务网关是在微服务前边设置一道屏障,请求先到服务网关,网关会对请求进行过虑.校验.路由等处…
远程 调用Spring Security来申请令牌,然后把申请到令牌存储到redis里面 cookieMaxAge: ‐1   -1表示浏览器一关闭cookie就失效. 测试远程申请令牌 TestClient 注入RestTemplate,来实现远程调用 令牌请求的地址是40400局势当前auth项目的端口. 认证服务最终会把自己注册到eureka 所以远程调用,建议从eureka中来拿地址.注入LoadBalancerClient,这是客户端负载均衡器,用来请求eureka拿到请求列表,从中选…