10 2019 档案

摘要:增值检测也进行了两遍。 补充onChanges的注释。 value是SimpleChanges Simples是一个接口,里面的每一项是SimplChange对象。 SimpleChange对象 ngAfterContentInit 组件内容初始化。需要实现接口AfterContentInit 在组 阅读全文
posted @ 2019-10-30 16:06 高山-景行 阅读(164) 评论(0) 推荐(0) 编辑
摘要:ngDoCheck理解为angular去检查内部各种值的变化 ngAfterContentInit:理解为组件里面嵌套的一些内容,它初始化完毕。 ngAfterContentChecked:投影初始化之后,系统会检查投影的内容,检查属性的变化。为什么要检查属性的变化,通过检查属性的变化,反馈到视图上 阅读全文
posted @ 2019-10-30 15:36 高山-景行 阅读(229) 评论(0) 推荐(0) 编辑
摘要:index.ts内列出来当前目录里面,我想对外暴露的一些东西。好处是1,缩短文件名的导入,2是格力内部变化对外部的影响。 生成组件测试 会给我们生成四个文件 还去更新了一个文件 看一下做了哪些改动。点击这里,这是VSCode里面git的标签。 改动1 可以对文件历史进行对比 自己模块本身提供的组件, 阅读全文
posted @ 2019-10-30 14:54 高山-景行 阅读(215) 评论(0) 推荐(1) 编辑
摘要:索引的获取 first和last是布尔类型的 奇数偶数 []方括号表示的是数据绑定 ()圆括号就是事件绑定 、 开始代码 我们要实现的功能是菜单点击后,就变色 这样我们就得到了索引。 新建一个class的样式 什么时候用这个样式呢?当i等于(这个里双等于)选中的这个索引。 定义索引的变量。默认是等于 阅读全文
posted @ 2019-10-30 14:18 高山-景行 阅读(205) 评论(0) 推荐(0) 编辑
摘要:可以把复杂的类型做命名。例如接口中没有定义年龄,在定义person的时候 如果写了age那么就会报错。因为我们接口中并没有定义年龄。 可选属性,只读属性 新的布局方式 下面这里menu设置类型为TopMenu的接口,那么后面的热门、男装、手机 就报错了。 输入了title属性后,还缺少link的属性 阅读全文
posted @ 2019-10-30 11:25 高山-景行 阅读(244) 评论(0) 推荐(0) 编辑
摘要:杂谈coffeescript 箭头函数抄的是谁? coffeescript 双箭头的形式 箭头函数简洁的语法 数组内每一个值都平方一下 Map的写法 箭头函数的写法 平方后,每一个值再加1 number变量改成用n,更简化 瘦箭头 瘦箭头其实就是function 判断response里面的对象是否存 阅读全文
posted @ 2019-10-27 20:08 高山-景行 阅读(162) 评论(0) 推荐(0) 编辑
摘要:ES3里面的写法 匿名函数是用不了的 还是需要给他赋值 选中的这一部分叫做匿名函数 等于号叫做赋值 let xxx叫做声明 所以说这个地方是三个语法,首先声明一个匿名函数,然后声明一个xxx变量,最后把这个匿名函数赋值给这个变量xxx es6箭头函数 箭头函数只能做赋值,不能做声明 这是一个标准的箭 阅读全文
posted @ 2019-10-27 19:33 高山-景行 阅读(253) 评论(0) 推荐(0) 编辑
摘要:执行顺序问题 请问console.log输出的值是多少 输出的肯定是1 假如这里有一行未知的代码 会打印出几? 如果这段未知的代码是a=2。那么其实console输出的就是2 只关心代码,没有关心代码执行的顺序,这就是这条面试题最大的陷阱。 最终输出的是 语法问题 i虽然是写在for循环里面,但是它 阅读全文
posted @ 2019-10-27 00:28 高山-景行 阅读(169) 评论(0) 推荐(0) 编辑
摘要:更新时间:2019年10月20日23:22:05 启动的时候总是报一个Sass的错误。 本来以为是node.js的问题,还升级了最新的版本 解决方法参考的:Node Sass does not yet support your current environment解决办法 先卸载sass 再安装s 阅读全文
posted @ 2019-10-20 23:21 高山-景行 阅读(273) 评论(0) 推荐(0) 编辑
摘要:下载nginx:http://nginx.org/en/download.html 下载了最新的稳定版本 安装目录内运行nginx.exe 一直运行不起来。进程里面也没有这个进程。我把本机的IIS的80端口关闭了也起作用。 后来查询,发现可以在logs文件夹下面看错误日志。 An attempt w 阅读全文
posted @ 2019-10-16 20:57 高山-景行 阅读(492) 评论(0) 推荐(0) 编辑
摘要:启动前端代码 前端课程找到课程的发布页面 这样就打开了预览页面 结束 阅读全文
posted @ 2019-10-14 00:17 高山-景行 阅读(254) 评论(0) 推荐(0) 编辑
摘要:cms和课程的微服务重启 从数据库内找一条数据 进入到了断点 拼装课程信息 ,然后进行远程调用 抛出异常 可能是开了两个cms服务的事,负载均衡 到了另外一个服务里面 ,关掉一个 把02关掉,重启cms01 eureka服务也重启下,因为刚才关掉了一个cms的服务 如果要远程调用,需要增加无参构造方 阅读全文
posted @ 2019-10-14 00:12 高山-景行 阅读(220) 评论(0) 推荐(0) 编辑
摘要:红色部分 定义model 定义api接口 Service 主要分为这几步 定义feignClient 打开cms接口,根据接口来写feignClient Service调用 service调用feignClient 配置文件内配置站点id等 配置是为了添加页面拼装cmsPage对象 和mongoDB 阅读全文
posted @ 2019-10-13 23:46 高山-景行 阅读(167) 评论(0) 推荐(0) 编辑
摘要:5.3 CMS添加页面接口 cms服务对外提供添加页面接口,实现:如果不存在页面则添加,否则就更新页面信息。 此接口由课程管理服务在课程预览时调用。 接口方法、:页面没有就添加。有了更新数据 之前的接口定义的直接就是新增 定义api接口 所以建议单独定义保存页面的接口 实现接口 然后在Service 阅读全文
posted @ 2019-10-13 23:01 高山-景行 阅读(196) 评论(0) 推荐(0) 编辑
摘要:5.2 CMS页面预览测试 CMS已经提供了页面预览功能,课程预览功能要使用CMS页面预览接口实现,下边通过cms页面预览接口测试课 程预览的效果。 1、向cms_page表插入一条页面记录或者从cms_page找一个页面进行测试。 注意:页面配置一定要正确,需设置正确的模板id和dataUrl。 阅读全文
posted @ 2019-10-13 21:23 高山-景行 阅读(250) 评论(0) 推荐(0) 编辑
摘要:5 课程预览功能开发 5.1 需求分析 课程预览功能将使用cms系统提供的页面预览功能,业务流程如下: 1、用户进入课程管理页面,点击课程预览,请求到课程管理服务 2、课程管理服务远程调用cms添加页面接口向cms添加课程详情页面 3、课程管理服务得到cms返回课程详情页面id,并拼接生成课程预览U 阅读全文
posted @ 2019-10-13 21:08 高山-景行 阅读(227) 评论(0) 推荐(0) 编辑
摘要:测试模板 页面的模板已经做好了 直接那来用 测试模板,把这个模板copy到这个测试freemarker的resources目录 远程调用 获取数据 返回模板的文件名 tomcat不支持ssr。nginx支持 ssr文件页面的合并 4.3.3 模板保存 模板编写并测试通过后要在数据库保存: 1、模板信 阅读全文
posted @ 2019-10-13 20:09 高山-景行 阅读(291) 评论(0) 推荐(0) 编辑
摘要:根据课程详情页面写一个获取数据模型的接口 目录的数据来自于课程计划表 右侧是课程的图片 需要写一个接口 获取课程相关的所有信息。 所以就需要一个模型类,里面包含了基本信息、图片信息、等各种详情页面的信息数据 新建模型类 定义接口 controller service CourseMarket的dao 阅读全文
posted @ 2019-10-13 18:34 高山-景行 阅读(186) 评论(0) 推荐(0) 编辑
摘要:4 课程详情页面静态化 4.1 静态页面测试 4.1.1 页面内容组成 我们在编写一个页面时需要知道哪些信息是静态信息,哪些信息为动态信息,下图是页面的设计图: 打开静态页面,观察每部分的内容。 红色表示动态信息,红色以外表示静态信息。 红色动态信息:表示一个按钮,根据用户的登录状态、课程的购买状态 阅读全文
posted @ 2019-10-13 17:54 高山-景行 阅读(325) 评论(0) 推荐(0) 编辑
摘要:3.2.1 技术需求 课程详情页面是向用户展示课程信息的窗口,课程相当于网站的商品,本页面的访问量会非常大。此页面的内容设 计不仅要展示出课程核心重要的内容而且用户访问页面的速度要有保证,有统计显示打开一个页面超过4秒用户就 走掉了,所以本页面的性能要求是本页面的重要需求。 本页面另一个需求就是SE 阅读全文
posted @ 2019-10-13 17:03 高山-景行 阅读(206) 评论(0) 推荐(0) 编辑
摘要:2.2.1 Feign介绍 Feign是Netflix公司开源的轻量级rest客户端,使用Feign可以非常方便的实现Http 客户端。Spring Cloud引入 Feign并且集成了Ribbon实现客户端负载均衡调用。 上节课的restTemplate的方式需要定义url地址 还需要定义返回的类 阅读全文
posted @ 2019-10-12 23:47 高山-景行 阅读(275) 评论(0) 推荐(0) 编辑
摘要:2.1.2 Ribbon测试 Spring Cloud引入Ribbon配合 restTemplate 实现客户端负载均衡。Java中远程调用的技术有很多,如: webservice、socket、rmi、Apache HttpClient、OkHttp等,互联网项目使用基于http的客户端较多,本项 阅读全文
posted @ 2019-10-12 23:24 高山-景行 阅读(212) 评论(0) 推荐(0) 编辑
摘要:2 Feign远程调用 在前后端分离架构中,服务层被拆分成了很多的微服务,服务与服务之间难免发生交互,比如:课程发布需要调用 CMS服务生成课程静态化页面,本节研究微服务远程调用所使用的技术。 下图是课程管理服务远程调用CMS服务的流程图: 1、cms服务将自己注册到注册中心。 2、课程管理服务从注 阅读全文
posted @ 2019-10-12 15:07 高山-景行 阅读(176) 评论(0) 推荐(0) 编辑
摘要:cms相当于客户端 配置客户端的信息 后面加逗号分隔开 50102表示向两台eureka服务上报服务,如果有一台死掉了 那么还可以上另外的一台去注册服务 直接把ip注册到eureka 启动类加注解 重启cms的服务。eureka的注册列表内 就可以看到cms的微服务了 eureka2也有了 课程管理 阅读全文
posted @ 2019-10-12 09:20 高山-景行 阅读(162) 评论(0) 推荐(0) 编辑
摘要:1.3.2.2 高可用环境搭建 Eureka Server 高可用环境需要部署两个Eureka server,它们互相向对方注册。如果在本机启动两个Eureka需要 注意两个Eureka Server的端口要设置不一样,这里我们部署一个Eureka Server工程,将端口可配置,制作两个 Eure 阅读全文
posted @ 2019-10-11 23:28 高山-景行 阅读(231) 评论(0) 推荐(0) 编辑
摘要:我们先搭建单机环境 govern是治理的意思, 这样就把工程创建好了 创建包 创建SpringBoot的启动类。 在父工程里面已经确定了Spring Cloud的版本了。相当于锁定了版本 接下里只需要在子工程内引入eureka的包。那么这一些列相关的依赖jar包就自动的引进来。并且版本也 不用你管了 阅读全文
posted @ 2019-10-11 22:45 高山-景行 阅读(175) 评论(0) 推荐(0) 编辑
摘要:1 Eureka注册中心 1.1 需求分析 在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中 心来管理微服务信息。 为什么 要用注册中心? 1、微服务数量众多,要进行远程调用就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务 阅读全文
posted @ 2019-10-11 22:18 高山-景行 阅读(169) 评论(0) 推荐(0) 编辑
摘要:4.2 Feign 拦截器 4.2.1 定义Feign拦截器 微服务之间使用feign进行远程调用,采用feign拦截器实现远程调用携带JWT。 在common工程添加依赖: <dependency> <groupId>org.springframework.cloud</groupId> <art 阅读全文
posted @ 2019-10-11 14:37 高山-景行 阅读(353) 评论(0) 推荐(0) 编辑
摘要:4.1 需求分析 前边章节已经实现了用户携带身份令牌和JWT令牌访问微服务,微服务获取jwt并完成授权。 当微服务访问微服务,此时如果没有携带JWT则微服务会在授权时报错。 测试课程预览: 1、将课程管理服务和CMS全部添加授权配置 2、用户登录教学管理前端,进入课程发布界面,点击课程发布,观察课程 阅读全文
posted @ 2019-10-11 14:13 高山-景行 阅读(189) 评论(0) 推荐(0) 编辑
摘要:3.4.1需求分析 要想实现只查询自己的课程信息则需要获取当前用户所属的企业id。 1、认证服务在用户认证通过将用户所属公司id等信息存储到jwt令牌中。 2、用户请求到达资源服务后,资源服务需要取出header中的jwt令牌,并解析出用户信息。 说明令牌中已经有公司的id了 controller拿 阅读全文
posted @ 2019-10-11 13:48 高山-景行 阅读(472) 评论(0) 推荐(0) 编辑
摘要:重启课程管理服务 刷新页面,令牌到期需要先登陆 首先拿到company的id 测试2号公司 阅读全文
posted @ 2019-10-11 13:03 高山-景行 阅读(118) 评论(0) 推荐(0) 编辑
摘要:先定义接口 实现接口 service 需要通过conpanyId去查询课程的列表 定义dao 要查课程的图片 名称 等相关信息。所以使用Mybatis来实现 定义Mapper 看这个dao里面方法在哪里用了。 当时在做测试分页的时候用到了 放回一个封装后的结果 这里面就有课程的图片 定义mapper 阅读全文
posted @ 2019-10-11 12:59 高山-景行 阅读(173) 评论(0) 推荐(0) 编辑
摘要:3.3 我的课程细粒度授权 3.3.1 需求分析 1、我的课程查询,细粒度授权过程如下: 1)获取当前登录的用户Id 2)得到用户所属教育机构的Id 3)查询该教学机构下的课程信息 最终实现了用户只允许查询自己机构的课程信息。 2、修改课程管理服务“我的课程”的功能,根据公司Id查询课程,思路如下: 阅读全文
posted @ 2019-10-11 12:08 高山-景行 阅读(345) 评论(0) 推荐(0) 编辑
摘要:3 细粒度授权 3.1 需求分析 什么是细粒度授权? 细粒度授权也叫数据范围授权,即不同的用户所拥有的操作权限相同,但是能够操作的数据范围是不一样的。一个 例子:用户A和用户B都是教学机构,他们都拥有“我的课程”权限,但是两个用户所查询到的数据是不一样的。 本项目有哪些细粒度授权? 比如: 我的课程 阅读全文
posted @ 2019-10-11 12:05 高山-景行 阅读(297) 评论(0) 推荐(0) 编辑
摘要:携带JWT授权 登陆后jwt已经存到了sessionStorage里面 当进行微服务的请求就要携带令牌。我们在拦截器里面做文章。 在axios的intercepters拦截器上 手工的给这个课程 造一个图片的数据 刷新页面图片就有了。图片不显示的原因是因为图片的服务没有起来。 跟踪请求,在请求的时候 阅读全文
posted @ 2019-10-10 23:36 高山-景行 阅读(131) 评论(0) 推荐(0) 编辑
摘要:把下面赋值到nginx中 前端的服务需要配置一下 重启nginx 启动教学管理的前端 没有登陆直接就进来教学管理的后端了 下面我们要做的就是这两件事 1、前端页面校验用户的身份,如果用户没有登录则跳转到登录页面 2、前端请求资源服务需要在http header中添加jwt令牌,资源服务根据jwt令牌 阅读全文
posted @ 2019-10-10 23:26 高山-景行 阅读(158) 评论(0) 推荐(0) 编辑
摘要:4 前端集成认证授权 4.1 需求分析 截至目前认证授权服务端的功能已基本完成,本章实现前端集成认证授权功能。 前端集成认证授权功能需要作如下工作: 1、前端页面校验用户的身份,如果用户没有登录则跳转到登录页面 2、前端请求资源服务需要在http header中添加jwt令牌,资源服务根据jwt令牌 阅读全文
posted @ 2019-10-10 23:11 高山-景行 阅读(208) 评论(0) 推荐(0) 编辑
摘要:认证服务查询用户权限 如果权限为空就New一个对象出来。 因为如果为空的话 下面 forEach就会报空指针的异常 启动服务测试 重新登陆 看到userExt已经获取到了用户的权限 权限的字符串 复制redis里面的jwt jwt复制到这里进行测试。 查询出来用户的权限 现在就 可以拿着这个权限来访 阅读全文
posted @ 2019-10-10 21:47 高山-景行 阅读(168) 评论(0) 推荐(0) 编辑
摘要:3.3 用户中心查询用户权限 3.3.1 需求分析 认证服务请求用户中心查询用户信息,用户需要将用户基本信息和用户权限一同返回给认证服务。 本小节实现用户查询查询用户权限,并将用户权限信息添加到的用户信息中返回给认证服务。 最终目的是硬编码的权限 改成从数据库内查询 认证服务要通过用户中心来获取用户 阅读全文
posted @ 2019-10-10 21:37 高山-景行 阅读(291) 评论(0) 推荐(0) 编辑
摘要:3 动态查询用户权限 3.1 需求分析 截至目前在测试授权时使用的权限数据是静态数据,正常情况的流程是: 1、管理员给用户分配权限,权限数据写到数据库中。 2、认证服务在进行用户认证时从数据库读取用户的权限数据(动态数据) 本节实现动态权限数据。 之前权限是这里硬编码 写死的权限 3.2.1 数据模 阅读全文
posted @ 2019-10-10 21:22 高山-景行 阅读(394) 评论(0) 推荐(0) 编辑
摘要:现在没权限返回的信息 控制台抛出的异常是这个 : 不允许访问,这是Spring Security跑出来的 我们在异常处理器里面打个断点看一下 重新测试,就跳转到了异常捕获类这里。 这是异常的类型 这里定义了Map, 在Map里面可以定义异常类型对应的错误代码 解决方法?在这里再定义类型的错误代码? 阅读全文
posted @ 2019-10-10 20:45 高山-景行 阅读(166) 评论(0) 推荐(0) 编辑
摘要:这是我们课程的服务里面 加了授权的方法 重启课程管理的服务 首先需要登陆 在redis复制token 访问课程列表 用最新复制的令牌 最新token可以 调用teachplan方法 调用 一个没加注解的方法 所以肯定可以访问 结束 阅读全文
posted @ 2019-10-10 13:01 高山-景行 阅读(124) 评论(0) 推荐(0) 编辑
摘要:2.3 方法授权实现 2.3.1资源服务添加授权控制 1、要想在资源服务使用方法授权,首先在资源服务配置授权控制 1)添加spring-cloud-starter-oauth2依赖。 2)拷贝授权配置类ResourceServerConfig。 3)拷贝公钥。 课程管理这个服务已经被授权控制了 如果 阅读全文
posted @ 2019-10-10 12:54 高山-景行 阅读(148) 评论(0) 推荐(0) 编辑
摘要:修改认证服务的UserDetailServiceImpl类,下边的代码中 permissionList列表中存放了用户的权限, 并且将权限标识按照中间使用逗号分隔的语法组成一个字符串,最终提供给Spring security。 授权是SpringSecuriy的本职工作, 虽然可以在UserJwt里 阅读全文
posted @ 2019-10-10 12:45 高山-景行 阅读(216) 评论(0) 推荐(0) 编辑
摘要:2 方法授权 2.1需求分析 方法授权要完成的是资源服务根据jwt令牌完成对方法的授权,具体流程如下: 1、生成Jwt令牌时在令牌中写入用户所拥有的权限 我们给每个权限起个名字,例如某个用户拥有如下权限: course_find_list:课程查询 course_pic_list:课程图片查询 2、 阅读全文
posted @ 2019-10-10 12:31 高山-景行 阅读(249) 评论(0) 推荐(0) 编辑
摘要:1 用户授权业务流程 用户授权的业务流程如下: 业务流程说明如下: 1、用户认证通过,认证服务向浏览器cookie写入token( 身份令牌) 2、前端携带token请求用户中心服务获取jwt令牌 前端获取到jwt令牌解析,并存储在sessionStorage 3、前端携带cookie中的身份令牌及 阅读全文
posted @ 2019-10-10 12:25 高山-景行 阅读(255) 评论(0) 推荐(0) 编辑
摘要:在顶级域名下配置 网关的地址在上面配置一下 重启nginx 拒绝访问后面的代码都加上 return null 开始测试 换成域名的方式访问 有cookie。但是拿不到header 加上header测试 cookie和header都过了。但是redis这里没有过 登陆 登陆成功后redis里面也有值了 阅读全文
posted @ 2019-10-10 00:06 高山-景行 阅读(169) 评论(0) 推荐(0) 编辑
摘要:5 身份校验 5.1 需求分析 本小节实现网关连接Redis校验令牌: 1、从cookie查询用户身份令牌是否存在,不存在则拒绝访问 2、从http header查询jwt令牌是否存在,不存在则拒绝访问 3、从Redis查询user_token令牌是否过期,过期则拒绝访问 网关调用认证服务,校验用户 阅读全文
posted @ 2019-10-09 23:56 高山-景行 阅读(169) 评论(0) 推荐(0) 编辑
摘要:4.5 过虑器 Zuul的核心就是过虑器,通过过虑器实现请求过虑,身份校验等。 4.5.1 ZuulFilter 自定义过虑器需要继承 ZuulFilter,ZuulFilter是一个抽象类,需要覆盖它的四个方法,如下: 1、 shouldFilter:返回一个Boolean值,判断该过滤器是否需要 阅读全文
posted @ 2019-10-09 23:39 高山-景行 阅读(123) 评论(0) 推荐(0) 编辑
摘要:4.4 路由配置 4.4.1需求分析 Zuul网关具有代理的功能,根据请求的url转发到微服务,如下图: 客户端请求网关/api/learning,通过路由转发到/learning 客户端请求网关/api/course,通过路由转发到/course 让微服务以/api开头, 后面跟着/api/cou 阅读全文
posted @ 2019-10-09 23:21 高山-景行 阅读(175) 评论(0) 推荐(0) 编辑
摘要:4 Zuul网关 4.1 需求分析 网关的作用相当于一个过虑器、拦截器,它可以拦截多个系统的请求。 本章节要使用网关校验用户的身份是否合法。 4.2 Zuul介绍 什么是Zuul? Spring Cloud Zuul是整合Netflix公司的Zuul开源项目实现的微服务网关,它实现了请求路由、负载均 阅读全文
posted @ 2019-10-09 22:18 高山-景行 阅读(225) 评论(0) 推荐(0) 编辑
摘要:调试前端的退出 logout方法 找到路由 退出对应的组件页面 这就是退出的组件 退出的方法 把这两个js的引用,从上面复制到下面引用。因为可能存在js的冲突问题。 资料里面给了一个前端 整个覆盖当前代码里面的header.html 其实就是页面加上了这个js 跟踪后端代码 再次点击页面的退出。后端 阅读全文
posted @ 2019-10-09 22:07 高山-景行 阅读(191) 评论(0) 推荐(0) 编辑
摘要:实现退出 用户退出要以下动作: 1、删除redis中的token 2、删除cookie中的token controller内定义 spring securety config内放行 对这个url放行 执行这两步骤 service内加一个删除redis值的方法 主方法调用 删除cookie方法,把有效 阅读全文
posted @ 2019-10-09 21:59 高山-景行 阅读(175) 评论(0) 推荐(0) 编辑
摘要:前端代码 sessionStorage也是key/value的格式 页头显示当前用户 查询jwt nginx里面的配置 测试 开启认证服务 进行登陆 跳转到首页就应该立即请求查询。 跳转到首页 cookie已经有我们的uid了 打印日志进行测试 刷新页面没有获取到数据 下面继续打印uid 刷新页面 阅读全文
posted @ 2019-10-09 21:39 高山-景行 阅读(368) 评论(0) 推荐(0) 编辑
摘要:定义接口 在api的项目里面定义。AuthControllerApi里面定义接口 jwtResult,里面就有一个jwt的字段。 实现接口 需要这三步 定义私有方法从cookie中读取访问令牌 参数需要request和cookie的名字 难道httpRequest 如果取多个cookie就传多个参数 阅读全文
posted @ 2019-10-09 21:09 高山-景行 阅读(186) 评论(0) 推荐(0) 编辑
摘要:登陆成功 应该要显示用户的信息 cookie只存了用户的身份令牌。不包含用户的信息 拿着短令牌 请求认证服务获取到jwt。然后存储到sessionStorage 1、用户请求认证服务,登录成功。 2、用户登录成功,认证服务向cookie写入身份令牌,向redis写入user_token(身份令牌及授 阅读全文
posted @ 2019-10-09 12:32 高山-景行 阅读(181) 评论(0) 推荐(0) 编辑
摘要:点击登陆注册链接 跳转到登陆的页面 门户的前端代码 当前路径base64编码 登陆的表单,在学习中心的前端。 这就是登陆的表单 这是表单的校验 请求服务端的接口 登陆请求的方法 请求的地址nginx上配置过了 里面做了一个代理的转发 测试 输错账号和密码 密码错误的提示 输入正确的 登陆成功跳转到了 阅读全文
posted @ 2019-10-09 12:27 高山-景行 阅读(200) 评论(0) 推荐(0) 编辑
摘要:1.2.5.4 解析申请令牌错误信息 当账号输入错误应该返回用户不存在的信息,当密码错误要返回用户名或密码错误信息,业务流程图如下: 修改申请令牌的程序解析返回的错误: 由于restTemplate收到400或401的错误会抛出异常,而spring security针对账号不存在及密码错误会返回40 阅读全文
posted @ 2019-10-09 12:15 高山-景行 阅读(212) 评论(0) 推荐(0) 编辑
摘要:演示MD5加密的方式 数据库内的数据密码虽然都是6个1但是 每次加密出来的字符串是不一样的 加盐 测试BCrpty 循环10次加密 密码的校验 比人工的加盐要方便的多 这是创建的一个Spring的Bean。、在AuthorizationServerConfig配置类中配置BCryptPassword 阅读全文
posted @ 2019-10-09 12:06 高山-景行 阅读(172) 评论(0) 推荐(0) 编辑
摘要:H:\BaiDu\黑马传智JavaEE57期 2019最新基础+就业+在职加薪\阶段5 3.微服务项目【学成在线】· Lombok 是一种 Java™ 实用工具,可用来帮助开发人员消除 Java 的冗长,尤其是对于简单的 Java 对象(POJO)。它通过注解实现这一目的。 https://www. 阅读全文
posted @ 2019-10-08 23:54 高山-景行 阅读(1108) 评论(0) 推荐(0) 编辑
摘要:用户认证服务调用根据账号查询用户的信息 怎么远程调用呢?要创建一个客户端,这个客户端其实就是一个接口 标明服务的名称是ucenter服务 这是ucenter服务里面 复制过来接口的定义,GetMapping里面加入了/ucenter的路径 注入client 开始远程调用 远程调用 获取到用户的数据 阅读全文
posted @ 2019-10-08 23:51 高山-景行 阅读(242) 评论(0) 推荐(0) 编辑
摘要:定义dao 权限放在授权的课程里面做,现在先不管。我们还需要查企业信息,就是用户所属的公司 公司表 对应关系在xc_company 这是一个关系 表 这个表里有唯一索引 user_id 所以根据user_id关联就可以查到公司的id 创建XcCompanyUser表的dao文件。XcCompanyU 阅读全文
posted @ 2019-10-08 23:34 高山-景行 阅读(128) 评论(0) 推荐(0) 编辑
摘要:1.2.4 查询用户接口 完成用户中心根据账号查询用户信息接口功能。 在ucenter这个服务里面定义查询用户信息的接口 这个接口在auth的服务的loadUserByUserName这个方法里面被调用。这个方法里面只能得到用户的账号,所以只能根据用户的账号来查询。 用户表示xc_user 所以接口 阅读全文
posted @ 2019-10-08 23:19 高山-景行 阅读(184) 评论(0) 推荐(0) 编辑
摘要:1.2 认证服务查询数据库 1.2.1 需求分析 认证服务根据数据库中的用户信息去校验用户的身份,即校验账号和密码是否匹配。 认证服务不直接连接数据库,而是通过用户中心服务去查询用户中心数据库。 完整的流程图如下: 创建用户中心数据库 用户中心负责用户管理,包括:用户信息管理、角色管理、权限管理等。 阅读全文
posted @ 2019-10-08 23:04 高山-景行 阅读(167) 评论(0) 推荐(0) 编辑
摘要:1 用户认证 1.1 用户认证流程分析 用户认证流程如下: 访问下面的资源需要携带身份令牌和jwt令牌,客户端可以通过身份认证的令牌从服务端拿到长令牌, 一会要实现认证服务请求用户中心从数据库内来查询账号以及密码 客户端要访问微服务,需要拿着短令牌获取长令牌才可以访问。所以前端一定是要请求认证服务, 阅读全文
posted @ 2019-10-08 22:21 高山-景行 阅读(249) 评论(0) 推荐(0) 编辑
摘要:测试接口 因为继承了spring security会拦截这个请求,我们需要写代码 让他对这个认证接口放行 查看代码发现之前已经写过放行的代码了 发现是路径前面少了auth 加断点,测试。申请令牌 redis里面的存储 测试cookie 因为cookie绑定了域名 上面再配置一个认证服务的地址 重启n 阅读全文
posted @ 2019-10-08 22:03 高山-景行 阅读(339) 评论(0) 推荐(0) 编辑
摘要:补充controller方法 判断是否有值传过来。 私有方法存储cookie httpOnly设置为false的话 浏览器就拿到这个cookie 拿到Response cookie在配置文件内的配置 改成xuecheng.com controller注入域名 注入cookie的有效期 主方法调用 最 阅读全文
posted @ 2019-10-08 21:49 高山-景行 阅读(173) 评论(0) 推荐(0) 编辑
摘要:定义AuthController 实现刚才写的api接口 controller定义热requestMapping 是 / 就可以了。 因为我们的登陆跟路径就是/auth. 这样到login就是 /auth/userlogin 定义Service 在controller里面注入Service。我们需要 阅读全文
posted @ 2019-10-08 21:39 高山-景行 阅读(185) 评论(0) 推荐(0) 编辑
摘要:远程 调用Spring Security来申请令牌,然后把申请到令牌存储到redis里面 cookieMaxAge: ‐1 -1表示浏览器一关闭cookie就失效。 测试远程申请令牌 TestClient 注入RestTemplate,来实现远程调用 令牌请求的地址是40400局势当前auth项目的 阅读全文
posted @ 2019-10-08 13:05 高山-景行 阅读(303) 评论(0) 推荐(0) 编辑
摘要:4.3 认证服务 4.3.1 需求分析 认证服务需要实现的功能如下: 1、登录接口 前端post提交账号、密码等,用户身份校验通过,生成令牌,并将令牌存储到redis。 将令牌写入cookie。 2、退出接口 校验当前用户的身份为合法并且为已登录状态。 将令牌从redis删除。 删除cookie中的 阅读全文
posted @ 2019-10-08 00:07 高山-景行 阅读(198) 评论(0) 推荐(0) 编辑
摘要:4.2 Redis配置 4.2.1 安装Redis 1、安装Redis服务 下载Windows版本的redis:https://github.com/MicrosoftArchive/redis/tags 下载Redis-x64-3.2.100版本,解压Redis-x64-3.2.100.zip 进 阅读全文
posted @ 2019-10-07 23:44 高山-景行 阅读(204) 评论(0) 推荐(0) 编辑
摘要:4 认证接口开发 4.1 需求分析 用户登录的流程图如下: 执行流程: 1、用户登录,请求认证服务 2、认证服务认证通过,生成jwt令牌,将jwt令牌及相关信息写入Redis,并且将身份令牌写入cookie 3、用户访问资源页面,带着cookie到网关 4、网关从cookie获取token,并查询R 阅读全文
posted @ 2019-10-07 23:33 高山-景行 阅读(213) 评论(0) 推荐(0) 编辑
摘要:生成jwt需要用私钥来签名。在Auth认证服务下创建测试类 创建密钥工厂,构造函数需要的参数 获取私钥 有了私钥就可以生成JWT令牌 使用jwtHelper是spring security里面的类 encode编码方法里面需要 参数1:内容 参数2:签名 令牌的内容用HashMap。然后转成json 阅读全文
posted @ 2019-10-07 22:40 高山-景行 阅读(222) 评论(0) 推荐(0) 编辑
摘要:3.6.3 JWT入门 Spring Security 提供对JWT的支持,本节我们使用Spring Security 提供的JwtHelper来创建JWT令牌,校验JWT令牌 等操作。 3.6.3.1 生成私钥和公钥 JWT令牌生成采用非对称加密算法 1、生成密钥证书 下边命令生成密钥证书,采用R 阅读全文
posted @ 2019-10-07 21:56 高山-景行 阅读(634) 评论(0) 推荐(0) 编辑
摘要:3.6 JWT研究 3.6.1 JWT介绍 在介绍JWT之前先看一下传统校验令牌的方法,如下图: 问题: 传统授权方法的问题是用户每次请求资源服务,资源服务都需要携带令牌访问认证服务去校验令牌的合法性,并根 据令牌获取用户的相关信息,性能低下。 解决: 使用JWT的思路是,用户认证通过会得到一个JW 阅读全文
posted @ 2019-10-07 21:12 高山-景行 阅读(215) 评论(0) 推荐(0) 编辑
摘要:3.5校验令牌 Spring Security Oauth2提供校验令牌的端点,如下: Get: http://localhost:40400/auth/oauth/check_token?token= 参数: token:令牌 使用postman测试如下: 校验地址 前面路径是固定的: 把获取到的 阅读全文
posted @ 2019-10-07 20:13 高山-景行 阅读(759) 评论(0) 推荐(0) 编辑
摘要:密码模式(Resource Owner Password Credentials)与授权码模式的区别是申请令牌不再使用授权码,而是直接 通过用户名和密码即可申请令牌。 测试如下: Post请求:http://localhost:40400/auth/oauth/token 参数: grant_typ 阅读全文
posted @ 2019-10-07 18:59 高山-景行 阅读(231) 评论(0) 推荐(0) 编辑
摘要:3.3.4.4 解决swagger-ui无法访问 当课程管理加了授权之后再访问swagger-ui则报错: 这里默认配置的了所有的请求都必须认证 把图片认证的路径加进去的话 那么访问课程图片的列表 就不需要认证了 重启course服务 在swaggerUI内测试接口 现在测试不行。要传token / 阅读全文
posted @ 2019-10-07 18:52 高山-景行 阅读(452) 评论(0) 推荐(0) 编辑
摘要:下面要完成 5、6两个步骤 3.3.4 资源服务授权 3.3.4.1 资源服务授权流程 资源服务拥有要访问的受保护资源,客户端携带令牌访问资源服务,如果令牌合法则可成功访问资源服务中的资 源,如下图: 上图的业务流程如下: 1、客户端请求认证服务申请令牌 2、认证服务生成令牌 认证服务采用非对称加密 阅读全文
posted @ 2019-10-07 18:44 高山-景行 阅读(224) 评论(0) 推荐(0) 编辑
摘要:3.3 Oauth2授权码模式 3.3.1 Oauth2授权模式 Oauth2有以下授权模式: 授权码模式(Authorization Code) 隐式授权模式(Implicit) 密码模式(Resource Owner Password Credentials) 客户端模式(Client Cred 阅读全文
posted @ 2019-10-07 18:25 高山-景行 阅读(426) 评论(0) 推荐(0) 编辑
摘要:3 Spring Security Oauth2研究 3.1 目标 本项目认证服务基于Spring Security Oauth2进行构建,并在其基础上作了一些扩展,采用JWT令牌机制,并自定 义了用户身份信息的内容。 本教程的主要目标是学习在项目中集成Spring Security Oauth2的 阅读全文
posted @ 2019-10-07 15:58 高山-景行 阅读(365) 评论(0) 推荐(0) 编辑
摘要:2.3 Spring security Oauth2认证解决方案 本项目采用 Spring security + Oauth2完成用户认证及用户授权,Spring security 是一个强大的和高度可定制的身 份验证和访问控制框架,Spring security 框架集成了Oauth2协议,下图是 阅读全文
posted @ 2019-10-07 14:53 高山-景行 阅读(259) 评论(0) 推荐(0) 编辑
摘要:2.2 Oauth2认证 2.2.1 Oauth2认证流程 第三方认证技术方案最主要是解决认证协议的通用标准 问题,因为要实现 跨系统认证,各系统之间要遵循一定的 接口协议。 OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。同时,任何第三方都可以使用OAUTH认 证服务,任何服务 阅读全文
posted @ 2019-10-07 14:37 高山-景行 阅读(384) 评论(0) 推荐(0) 编辑
摘要:2 用户认证技术方案 2.1 单点登录技术方案 分布式系统要实现单点登录,通常将认证系统独立抽取出来,并且将用户身份信息存储在单独的存储介质,比如: MySQL、Redis,考虑性能要求,通常存储在Redis中,如下图: 单点登录的特点是: 1、认证系统为独立的系统。 2、各子系统通过Http或其它 阅读全文
posted @ 2019-10-07 14:18 高山-景行 阅读(341) 评论(0) 推荐(0) 编辑
摘要:1.1 用户认证与授权 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进行学习。如何去记录学生的学习过程 呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什么课程;如果用户要购 买课程也需要知道用户的身份信息。所以,去管理学生的学习过程最基本的要实现 阅读全文
posted @ 2019-10-07 14:07 高山-景行 阅读(258) 评论(0) 推荐(0) 编辑
摘要:3 fastDFS入门 3.1fastDFS安装与配置 3.1.1 导入虚拟机 对fastDFS的安装过程不要求学生掌握,可以直接导入老师提供虚拟机。 1、使用Vmware打开虚拟机配置文件“CentOS 7 64 位.vmx”,提示如下图: 2、选择“我已复制该虚拟机” 3、启动虚拟机之前启动VM 阅读全文
posted @ 2019-10-07 12:47 高山-景行 阅读(305) 评论(0) 推荐(0) 编辑
摘要:2.2.2文件上传流程 客户端上传文件后存储服务器将文件ID返回给客户端,此文件ID用于以后访问该文件的索引信息。文件索引信息 包括:组名,虚拟磁盘路径,数据两级目录,文件名。 组名:文件上传后所在的storage组名称,在文件上传成功后有storage服务器返回,需要客户端自行保存。 虚拟磁盘路径 阅读全文
posted @ 2019-10-07 12:24 高山-景行 阅读(217) 评论(0) 推荐(0) 编辑
摘要:2 什么是fastDFS 2.1 fastDSF介绍 FastDFS是用c语言编写的一款开源的分布式文件系统,它是由淘宝资深架构师余庆编写并开源。FastDFS专为互联 网量身定制,充分考虑了冗余备份、负载均衡、线性扩容等机制,并注重高可用、高性能等指标,使用FastDFS很 容易搭建一套高性能的文 阅读全文
posted @ 2019-10-07 11:40 高山-景行 阅读(202) 评论(0) 推荐(0) 编辑
摘要:1.2.1什么是文件系统 引用“百度百科”中的描述: 总结:文件系统是负责管理和存储文件的系统软件,它是操作系统和硬件驱动之间的桥梁,操作系统通过文件系统提供的接口去存取文件,用户通过操作系统访问磁盘上的文件。如下图: 常见的文件系统:FAT16/FAT32、NTFS、HFS、UFS、APFS、XF 阅读全文
posted @ 2019-10-07 11:30 高山-景行 阅读(174) 评论(0) 推荐(0) 编辑
摘要:1.2.2什么是分布式文件系统 引用“百度百科”中的描述: 为什么会有分布文件系统呢? 分布式文件系统是面对互联网的需求而产生,互联网时代对海量数据如何存储?靠简单的增加硬盘的个数已经满足 不了我们的要求,因为硬盘传输速度有限但是数据在急剧增长,另外我们还要要做好数据备份、数据安全等。 采用分布式文 阅读全文
posted @ 2019-10-07 11:27 高山-景行 阅读(151) 评论(0) 推荐(0) 编辑
摘要:什么是分布式文件系统 1.1 技术应用场景 传智播客拥有大量优质的视频教程,并且免费提供给用户去下载,文件太多如何高效存储?用户访问量大如何保证 下载速度?今天讲解的分布式文件系统将解决这些问题。 分布式文件系统解决了海量文件存储及传输访问的瓶颈问题,对海量视频的管理、对海量图片的管理等 课程的图片 阅读全文
posted @ 2019-10-06 23:50 高山-景行 阅读(188) 评论(0) 推荐(0) 编辑
摘要:课程营销信息包括课程价格、课程有效期等信息。 课程营销信息使用course_market表存储。 接口我们要提供两个。 接口1先查询课程营销的信息,在页面展示。 接口2:叫做更新,如果发现数据不存在就是先添加操作。 阅读全文
posted @ 2019-10-06 21:20 高山-景行 阅读(171) 评论(0) 推荐(0) 编辑
摘要:3 课程信息修改 3.1 需求分析 课程添加成功进入课程管理页面,通过课程管理页面修改课程的基本信息、编辑课程图片、编辑课程营销信息等。 本小节实现修改课程。 3.2 课程管理页面说明 3.2.1 页面结构 课程管理页面的结构如下: 3.2.2 课程管理导航页面 1、定义course_manage. 阅读全文
posted @ 2019-10-06 21:15 高山-景行 阅读(212) 评论(0) 推荐(0) 编辑
摘要:课程的等级是个单选按钮 2.3 数据字典 2.3.1介绍 在新增课程界面需要选择课程等级、课程状态等,这些信息统一采用数据字典管理的方式。 本项目对一些业务的分类配置信息,比如:课程等级、课程状态、用户类型、用户状态等进行统一管理,通过在数 据库创建数据字典表来维护这些分类信息。 数据字典对系统的业 阅读全文
posted @ 2019-10-06 20:12 高山-景行 阅读(305) 评论(0) 推荐(0) 编辑
摘要:2 新增课程 2.1 需求分析 用户操作流程如下: 1、用户进入“我的课程”页面,点击“新增课程”,进入新增课程页面 2、填写课程信息,选择课程分类、课程等级、学习模式等。 3、信息填写完毕,点击“提交”,课程添加成功或课程添加失败并提示失败原因。 需要解决的是在新增页面上输入的信息: 1、课程分类 阅读全文
posted @ 2019-10-06 20:05 高山-景行 阅读(323) 评论(0) 推荐(0) 编辑
摘要:我的课程列表使用element 的card组件,如下: 前端页面代码 点击新增到了一个新增课程的页面 新增课程的界面 下面的card是循环遍历的代码 写死的card的静态数据 请求服务端的接口拿到数据 api接口 输入参数: 页码、每页显示个数、查询条件 输出结果类型: QueryResponseR 阅读全文
posted @ 2019-10-06 19:58 高山-景行 阅读(231) 评论(0) 推荐(0) 编辑
摘要:1 我的课程 1.1需求分析 课程添加完成后可通过我的课程进入课程修改页面,此页面显示我的课程列表,如下图所示,可分页查询。 注意:由于课程图片服务器没有搭建,这里在测试时图片暂时无法显示。 上边的查询要实现分页、会存在多表关联查询,所以建议使用mybatis实现我的课程查询。 1.2 PageHe 阅读全文
posted @ 2019-10-06 19:48 高山-景行 阅读(198) 评论(0) 推荐(0) 编辑
摘要:调试课程计划的添加功能 课程添加的弹窗使用的是dialog组件 这个变量控制对话框是否显示 当点击按钮的时候就设置为true。那么弹窗就会显示出来了 测试 在测试的节点下面添加一个子节点 添加成功后会自动的来刷新 从数据库中查询这个节点的数据 看看全不全 添加一个不选择上级节点的数据 案例开发下添加 阅读全文
posted @ 2019-10-06 18:22 高山-景行 阅读(241) 评论(0) 推荐(0) 编辑
摘要:api内定义接口 controller内实现接口 service service内定义添加课程的计划 判断当前对象是否为空,对象的课程id 课程名称 是够为空 ,如果为空就抛出非法参数的异常。 所有的课程的根节点的parentId是0 这样就查到了根节点 定义TeachplanRepository 阅读全文
posted @ 2019-10-06 18:14 高山-景行 阅读(201) 评论(0) 推荐(0) 编辑
摘要:用户操作流程: 1、进入课程计划页面,点击“添加课程计划” 2、打开添加课程计划页面,输入课程计划信息 上级结点说明: 不选择上级结点表示当前课程计划为该课程的一级结点。 当添加该课程在课程计划中还没有节点时要自动添加课程的根结点。 3、点击提交。 上级节点是需要特别处理的地方。上级节点不选择就是根 阅读全文
posted @ 2019-10-06 17:46 高山-景行 阅读(207) 评论(0) 推荐(0) 编辑
摘要:前端页面代码 点击课程计划。单后面的id不对。复制这个id进行查看 可能需要刷新页面,这样我们就看到了加载出来的tree的数据。这就说明我们的接口查询就是正常的了 Chrome F12跟踪请求的数据 这就是前端的测试 也可以找到我的课程的页面。把查询的id写死 这样这个id的数据就带过来了 阅读全文
posted @ 2019-10-06 17:17 高山-景行 阅读(210) 评论(0) 推荐(0) 编辑
摘要:首先需要定义mapper,在dao里面创建一个TeachplanMapper 一定要用@Mapper的注解标识一下 定义接口方法 与mapper定义的映射xml文件 返回的结果映射用resultMap 定义resultMap的映射 type类型就是要返回的类的完整的包的路径 复制完整的引用路径 把刚 阅读全文
posted @ 2019-10-06 16:06 高山-景行 阅读(179) 评论(0) 推荐(0) 编辑
摘要:实现课程计划查询接口的sql语句, SpringDataJpa是面向对象的,我们要查123三个级别的数据,sql语句写出来,所以用Mybatis 第二级别 parentId是第一级节点的id,三级节点的parentId就是二级节点的id, 所以我们采用表自链接来完成本表内这三个级别节点的关联查询 自 阅读全文
posted @ 2019-10-06 15:24 高山-景行 阅读(227) 评论(0) 推荐(0) 编辑
摘要:先熟悉下表结构 这张表对应一个模型类 使用Spring Data Jpa任何一个模型类都要用@Entity这个注解来标识一下 另外要制定表名 设置主键的生成规则 下面这些字段和数据库是一一对应的 最终接口返回的数据类型是这种结构 所以我们单独定义一个数据的模型类 包ext表示里面都是扩展的包 Tea 阅读全文
posted @ 2019-10-06 12:35 高山-景行 阅读(207) 评论(0) 推荐(0) 编辑
摘要:3.2.2 页面原型 3.2.2.1 tree组件介绍 本功能使用element-ui 的tree组件来完成 在course_plan.vue文件中添加tree组件的代码,进行测试: 这个就是课程计划的页面 tree的静态数据格式 前端这个方法里面返回的是html的代码。这里面用到了JSX语法 JS 阅读全文
posted @ 2019-10-05 23:51 高山-景行 阅读(204) 评论(0) 推荐(0) 编辑
摘要:什么是课程计划? 课程计划定义了课程的章节内容,学生通过课程计划进行在线学习,下图中右侧显示的就是课程计划。 课程计划包括两级,第一级是课程的大章节、第二级是大章节下属的小章节,每个小章节通常是一段视频,学生点 击小章节在线学习。 教学管理人员对课程计划如何管理? 功能包括:添加课程计划、删除课程计 阅读全文
posted @ 2019-10-05 23:43 高山-景行 阅读(227) 评论(0) 推荐(0) 编辑
摘要:1) 创建数据库 课程管理使用MySQL数据库,创建课程管理数据库:xc_course。 导入xc_course.sql脚本 F:\day06 页面发布 课程管理\资料\课程管理数据库\xc_course.sql 2) 数据表介绍 课程信息内容繁多,将课程信息分类保存在如下表中: 微服务 1)持久层 阅读全文
posted @ 2019-10-05 23:30 高山-景行 阅读(223) 评论(0) 推荐(0) 编辑
摘要:本模块对课程信息管理功能的教学方法采用实战教学方法,旨在通过实战提高接口编写的能力,具体教学方法如 下: 1、前后端工程导入 教学管理前端工程采用与系统管理工程相同的技术,直接导入后在此基础上开发。 课程管理服务端工程采用Spring Boot技术构建,技术层技术使用Spring data Jpa( 阅读全文
posted @ 2019-10-05 22:59 高山-景行 阅读(171) 评论(0) 推荐(0) 编辑
摘要:在线教育平台的课程信息相当于电商平台的商品。课程管理是后台管理功能中最重要的模块。本项目为教学机构提 供课程管理功能,教学机构可以添加属于自己的课程,供学生在线学习。 课程管理包括如下功能需求: 1、分类管理 2、新增课程 3、修改课程 4、预览课程 5、发布课程 用户的操作流程如下: 1、进入我的 阅读全文
posted @ 2019-10-05 21:46 高山-景行 阅读(251) 评论(0) 推荐(0) 编辑
摘要:1、如果发布到服务器的页面内容不正确怎么办? 2、一个页面需要发布很多服务器,点击“发布”后如何知道详细的发布结果? 3、一个页面发布到多个服务器,其中有一个服务器发布失败时怎么办? 把发布成功的服务器的状态返回来。就知道哪个服务器发送成功了。哪个服务器发送失败了 下面是一个消息队列对应了多台服务器 阅读全文
posted @ 2019-10-05 21:31 高山-景行 阅读(183) 评论(0) 推荐(0) 编辑
摘要:前端 前端工程加入发布的按钮 定义方法 显示当前工程的文件夹 就打开了本地的文件夹。然后复制这个路径 nginx配置 nginx重新加载配置文件 刷新首页 看看有没有问题 这里的路径改成正确的地址 发布测试 这是当前的轮播图的代码 前端按钮的代码写错了。刚才是直接复制过去的有错误,这里修正 发布05 阅读全文
posted @ 2019-10-05 21:20 高山-景行 阅读(184) 评论(0) 推荐(0) 编辑
摘要:测试页面发布的接口 首先把cms-client消费者启动起来。然后把cms生产者启动起来。 在消费方这里打断点 生产方也在这里加断点 先执行静态化拿到了html数据 保存到gridFS中 保存html把文件的id也写进去了。 消费方 已发送消息 消费方就接收到了消息 一步一步走,得到物理路径 阅读全文
posted @ 2019-10-05 21:08 高山-景行 阅读(149) 评论(0) 推荐(0) 编辑
摘要:1.3 页面发布生产方 1.3.1 需求分析 管理员通过 cms系统发布“页面发布”的消费,cms系统作为页面发布的生产方。 需求如下: 1、管理员进入管理界面点击“页面发布”,前端请求cms页面发布接口。 2、cms页面发布接口执行页面静态化,并将静态化页面存储至GridFS中。 3、静态化成功后 阅读全文
posted @ 2019-10-05 21:01 高山-景行 阅读(230) 评论(0) 推荐(0) 编辑
摘要:创建mq的包,在里面创建ConsumerPostPage。监听MQ。接收页面发布的消息 写发布页面的方法postPage 从配置文件内获取要监听的队列的名称 这样使用@RabbitListener监听配置文件内的队列后,会触发当前这个postPage事件 拿到消息要解析的格式是json的格式。使用f 阅读全文
posted @ 2019-10-05 19:39 高山-景行 阅读(253) 评论(1) 推荐(0) 编辑
摘要:消息内容采用json格式存储数据,如下: 页面id:发布页面的id 现在做的是消息的消费方 定义dao 从cms的项目里面复制CmsPageRepository到cms-client的项目里面。 再复制CmsPageRepository改个名字叫做CmsSiteRepository 把泛型的参数改成 阅读全文
posted @ 2019-10-05 13:10 高山-景行 阅读(209) 评论(0) 推荐(0) 编辑
摘要:页面发布流程图如下: 1、前端请求cms执行页面发布。 2、cms执行静态化程序生成html文件。 3、cms将html文件存储到GridFS中。 4、cms向MQ发送页面发布消息 5、MQ将页面发布消息通知给Cms Client 6、Cms Client从GridFS中下载html文件 7、Cms 阅读全文
posted @ 2019-10-05 00:41 高山-景行 阅读(267) 评论(0) 推荐(0) 编辑
摘要:一些重要的配置文件直接复制过来了 jdbc和shiro的配置 application.properties里面的相关配置项的含义 日志界别的配置 数据返回到前端的json的配置 数据源的配置 需要新建mysql的数据库 Mybits相关的配置文件 MybitsConfig的配置文件 插入的时候是否自 阅读全文
posted @ 2019-10-04 23:54 高山-景行 阅读(391) 评论(3) 推荐(0) 编辑
摘要:本项目使用MQ实现页面发布的技术方案如下: 技术方案说明: 1、平台包括多个站点,页面归属不同的站点。 2、发布一个页面应将该页面发布到所属站点的服务器上。 3、每个站点服务部署cms client程序,并与交换机绑定,绑定时指定站点Id为routingKey。 指定站点id为routingKey就 阅读全文
posted @ 2019-10-04 23:12 高山-景行 阅读(249) 评论(0) 推荐(0) 编辑
摘要:创建消费者的类 使用@Component把这个类标记成一个Bean 把生产者里面创建的配置文件类复制过来 在原始的消费的方法上面 ,我们是可以拿到channel通道的 message.getBody就可以获取到消息 消息的字符串,这里我们可以直接打出msg 启动消费端 启动生产者端的发送的测试方法 阅读全文
posted @ 2019-10-04 19:03 高山-景行 阅读(154) 评论(0) 推荐(0) 编辑
摘要:springBoot给我们提供了 RarbbitTemplate发送消息 创建测试类,因为我们是基于SpringBoot的来写的测试类。所以要加上@SpringBootTest和@RunWith的注解 注入RabbmitTemplate 里面有很多convertAndSend的方法我们使用这个,向交 阅读全文
posted @ 2019-10-04 18:47 高山-景行 阅读(190) 评论(0) 推荐(0) 编辑
摘要:复制topic的代码 把常量都设置成public方便其他的类引用 ExchangeBuilder里面有4个方法分别对应四个交换机。 声明Email和短信的队列 队列绑定交换机 所以需要把Bean注入到方法内,所以我们基于名称的注入,使用Qualifier,它会从容器里面去找基于这个容器的Bean 交 阅读全文
posted @ 2019-10-04 18:39 高山-景行 阅读(211) 评论(0) 推荐(0) 编辑
摘要:我们选择基于Spring-Rabbit去操作RabbitMQ https://github.com/spring-projects/spring-amqp 使用spring-boot-starter-amqp会自动添加spring-rabbit依赖,如下: 加入引用的包 刷新一下包 消费者也加入包的 阅读全文
posted @ 2019-10-04 18:22 高山-景行 阅读(181) 评论(0) 推荐(0) 编辑
摘要:header模式 header模式与routing不同的地方在于,header模式取消routingkey,使用header中的 key/value(键值对)匹配 队列。 案例: 根据用户的通知设置去通知用户,设置接收Email的用户只接收Email,设置接收sms的用户只接收sms,设置两种 通知 阅读全文
posted @ 2019-10-04 18:12 高山-景行 阅读(178) 评论(0) 推荐(0) 编辑
摘要:路由模式: 1、每个消费者监听自己的队列,并且设置带统配符的routingkey。 2、生产者将消息发给broker,由交换机根据routingkey来转发消息到指定的队列。 创建测试用例 交换机的名称 清理场景 删除这个交换机 删除队列 再删除sms的队列 交换机的类型变成topic routin 阅读全文
posted @ 2019-10-04 18:07 高山-景行 阅读(163) 评论(0) 推荐(0) 编辑
摘要:先常见生产者 复制02的代码 先改一下交换机的名称 还需要制定routingKey。因为是两个消息 所以指定了两个routingKey 这里修改为当前指定的交换机名称 交换机和队列在绑定的时候指定我们新定义的routingKey 交换机在定义的时候,类型设置为Direct 发送消息要指定routin 阅读全文
posted @ 2019-10-04 11:38 高山-景行 阅读(155) 评论(0) 推荐(0) 编辑
摘要:队列在绑定交换机的时候可以指定routingKey, 路由模式: 1、每个消费者监听自己的队列,并且设置routingkey。 2、生产者将消息发给交换机,由交换机根据routingkey来转发消息到指定的队列。 例如下面指定的routingKey是error 下面这个设置了多个routingKey 阅读全文
posted @ 2019-10-04 11:18 高山-景行 阅读(172) 评论(0) 推荐(0) 编辑
摘要:消费者需要写两个消费者 定义邮件的类 复制以前的代码到邮件类里面进行修改 最上面 声明队列的名称和交换机的名称 监听修改为email 的队列的名称 手机短信接收端 复制一份email的接收端的代码 改名叫做sms 队列的名称改成短信的队列名称 启动程序测试 先启动生产者 生产者启动后就发送了5条消息 阅读全文
posted @ 2019-10-04 00:16 高山-景行 阅读(261) 评论(0) 推荐(0) 编辑
摘要:Publish/subscribe:发布订阅模式 发布订阅模式: 1、每个消费者监听自己的队列。 2、生产者将消息发给broker,由交换机将消息转发到绑定此交换机的每个队列,每个绑定交换机的队列都将接收 到消息 中间多了个交换机 一个消息生产者先发送给交换机,由交换机把消息发送给各个队列。每个队列 阅读全文
posted @ 2019-10-03 22:30 高山-景行 阅读(209) 评论(0) 推荐(0) 编辑
摘要:RabbitMQ有以下几种工作模式 : 1、Work queues 2、Publish/Subscribe 3、Routing 4、Topics 5、Header 6、RPC 1、Work queues work queues与入门程序相比,多了一个消费端,两个消费端共同消费同一个队列中的消息。 应 阅读全文
posted @ 2019-10-03 20:59 高山-景行 阅读(234) 评论(0) 推荐(0) 编辑
摘要:我们在consumer这个功能下进行代码的编写 首先是新建这个层级的包 创建入门程序的消费者 消费者也需要和mq建立通道。建立连接创建通道 在顶部都声明这个队列 下面写核心代码监听队列。basicConsume方法这就是核心方法 Ctrl+T--选择最后一个PublisherCallbackChan 阅读全文
posted @ 2019-10-03 20:44 高山-景行 阅读(204) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示