启动前端代码 前端课程找到课程的发布页面 这样就打开了预览页面 结束…
这是轮播图的原始文件 运行门户需要把 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 Eureka注册中心 1.1 需求分析 在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中 心来管理微服务信息. 为什么 要用注册中心? 1.微服务数量众多,要进行远程调用就需要知道服务端的ip地址和端口,注册中心帮助我们管理这些服务的ip和 端口. 2.微服务会实时上报自己的状态,注册中心统一管理这些微服务的状态,将存在问题的服务踢出服务列表,客户 端获取到可用的服务进行调用. A要想调用B的服务就必须知道服务的地址 ip和端口…
1.1 用户认证与授权 截至目前,项目已经完成了在线学习功能,用户通过在线学习页面点播视频进行学习.如何去记录学生的学习过程 呢?要想掌握学生的学习情况就需要知道用户的身份信息,记录哪个用户在什么时间学习什么课程:如果用户要购 买课程也需要知道用户的身份信息.所以,去管理学生的学习过程最基本的要实现用户的身份认证. 什么是用户身份认证? 用户身份认证即用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问.常见的用户身份认 证表现形式有:用户名密码登录,指纹打卡等方式. 什么是用户…
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相当于客户端 配置客户端的信息 后面加逗号分隔开 50102表示向两台eureka服务上报服务,如果有一台死掉了 那么还可以上另外的一台去注册服务 直接把ip注册到eureka 启动类加注解 重启cms的服务.eureka的注册列表内 就可以看到cms的微服务了 eureka2也有了 课程管理也注册到微服务 先加入依赖.然后刷新包 启动类加注解 配置文件内 client端的配置 启动课程管理的微服务 日志级别改成info 因为启动控制台 输出了太多的信息 结束…
修改认证服务的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拿到请求列表,从中选…
3 Spring Security Oauth2研究 3.1 目标 本项目认证服务基于Spring Security Oauth2进行构建,并在其基础上作了一些扩展,采用JWT令牌机制,并自定 义了用户身份信息的内容. 本教程的主要目标是学习在项目中集成Spring Security Oauth2的方法和流程,通过 spring Security Oauth2的研究需要达到以下目标: 1.理解Oauth2的授权码认证流程及密码认证的流程. 2.理解spring Security Oauth2的工…
api接口定义方法 api的微服务里面.CmsPageControllerApi内定义add方法,返回类型是CmsPageResult CmsPageResult继承了ResponseResult ResponseResult里面这三项,SUCCESS.SUCCESS_CODE.message 把新增的数据响应给客户端,客户端可能会用 加上swagger的注解 dao dao里面就不用写了我们直接用springDataMongoDB自带的save方法就可以了.在继承的MongoReposityo…
cms和课程的微服务重启 从数据库内找一条数据 进入到了断点 拼装课程信息 ,然后进行远程调用 抛出异常 可能是开了两个cms服务的事,负载均衡 到了另外一个服务里面 ,关掉一个 把02关掉,重启cms01 eureka服务也重启下,因为刚才关掉了一个cms的服务 如果要远程调用,需要增加无参构造方法.所以必须在这里个里面增加一个无参的构造方法 再次重启 课程的服务 远程调用后页面返回了null 在cms服务里面加断点测试 更新的时候id为null了. cmsPage这个对象为空了 这里变量写错…
4 课程详情页面静态化 4.1 静态页面测试 4.1.1 页面内容组成 我们在编写一个页面时需要知道哪些信息是静态信息,哪些信息为动态信息,下图是页面的设计图: 打开静态页面,观察每部分的内容. 红色表示动态信息,红色以外表示静态信息. 红色动态信息:表示一个按钮,根据用户的登录状态.课程的购买状态显示按钮的名称及按钮的事件. 包括以下信息内容: 1.课程信息 课程标题.价格.课程等级.授课模式.课程图片.课程介绍.课程目录. 2.课程统计信息 课程时长.评分.收藏人数 3.教育机构信息 公司名…
1.3.2.2 高可用环境搭建 Eureka Server 高可用环境需要部署两个Eureka server,它们互相向对方注册.如果在本机启动两个Eureka需要 注意两个Eureka Server的端口要设置不一样,这里我们部署一个Eureka Server工程,将端口可配置,制作两个 Eureka Server启动脚本,启动不同的端口,如下图: 1.在实际使用时Eureka Server至少部署两台服务器,实现高可用. 2.两台Eureka Server互相注册. 3.微服务需要连接两台E…
4.2 Feign 拦截器 4.2.1 定义Feign拦截器 微服务之间使用feign进行远程调用,采用feign拦截器实现远程调用携带JWT. 在common工程添加依赖: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring‐cloud‐starter‐openfeign</artifactId> </dependency> 拦截器…
4.1 需求分析 前边章节已经实现了用户携带身份令牌和JWT令牌访问微服务,微服务获取jwt并完成授权. 当微服务访问微服务,此时如果没有携带JWT则微服务会在授权时报错. 测试课程预览: 1.将课程管理服务和CMS全部添加授权配置 2.用户登录教学管理前端,进入课程发布界面,点击课程发布,观察课程管理服务端报错如下: 给cms的服务也接入认证 刷新包 复制授权的资源配置类 复制到cms的工程 复制公钥 cms的微服务重启下-测试 修改发布就要调用cms的服务了 点击修改发布 提示系统繁忙 控制…
携带JWT授权 登陆后jwt已经存到了sessionStorage里面 当进行微服务的请求就要携带令牌.我们在拦截器里面做文章. 在axios的intercepters拦截器上 手工的给这个课程 造一个图片的数据 刷新页面图片就有了.图片不显示的原因是因为图片的服务没有起来. 跟踪请求,在请求的时候把jwt带上了 点击课程计划 就没有权限 没有权限 给用户一个提示 请求后的拦截器 结束…
4 前端集成认证授权 4.1 需求分析 截至目前认证授权服务端的功能已基本完成,本章实现前端集成认证授权功能. 前端集成认证授权功能需要作如下工作: 1.前端页面校验用户的身份,如果用户没有登录则跳转到登录页面 2.前端请求资源服务需要在http header中添加jwt令牌,资源服务根据jwt令牌完成授权. 哪些功能需要前端请求时携带JWT? 用户登录成功请求资源服务都需要携带jwt令牌,因为资源服务已经实现了jwt认证,如果校验头部没有jwt则会认为 身份不合法. 前端携带jwt访问网关,网…
2.3 方法授权实现 2.3.1资源服务添加授权控制 1.要想在资源服务使用方法授权,首先在资源服务配置授权控制 1)添加spring-cloud-starter-oauth2依赖. 2)拷贝授权配置类ResourceServerConfig. 3)拷贝公钥. 课程管理这个服务已经被授权控制了 如果微服务想要被控制,因为科课程管理是后端管理的服务,所以它必须要校验令牌,校验用户身份 如果写了一个公开查询信息查询的服务,任何用户不用登陆就可以查询,它就不需要加入授权控制 第二步就是在方法上加注解…
1 用户授权业务流程 用户授权的业务流程如下: 业务流程说明如下: 1.用户认证通过,认证服务向浏览器cookie写入token( 身份令牌) 2.前端携带token请求用户中心服务获取jwt令牌 前端获取到jwt令牌解析,并存储在sessionStorage 3.前端携带cookie中的身份令牌及jwt令牌访问资源服务 前端请求资源服务需要携带两个token,一个是cookie中的身份令牌,一个是http header中的jwt 前端请求资源服务前在http header上添加jwt请求资源…
4.5 过虑器 Zuul的核心就是过虑器,通过过虑器实现请求过虑,身份校验等. 4.5.1 ZuulFilter 自定义过虑器需要继承 ZuulFilter,ZuulFilter是一个抽象类,需要覆盖它的四个方法,如下: 1. shouldFilter:返回一个Boolean值,判断该过滤器是否需要执行.返回true表示要执行此过虑器,否则不执行. 2. run:过滤器的业务逻辑. 3. filterType:返回字符串代表过滤器的类型, 如下 pre:请求在被路由之前执行 routing:在路…
4.4 路由配置 4.4.1需求分析 Zuul网关具有代理的功能,根据请求的url转发到微服务,如下图: 客户端请求网关/api/learning,通过路由转发到/learning 客户端请求网关/api/course,通过路由转发到/course 让微服务以/api开头, 后面跟着/api/course就转发到course的微服务. /api/learing 后缀的就转发到learing的微服务 配置路由 查看课程管理的微服务的url /api是网站的跟路径 课程管理的微服务名称是这个名称 配…
1 用户认证 1.1 用户认证流程分析 用户认证流程如下: 访问下面的资源需要携带身份令牌和jwt令牌,客户端可以通过身份认证的令牌从服务端拿到长令牌, 一会要实现认证服务请求用户中心从数据库内来查询账号以及密码 客户端要访问微服务,需要拿着短令牌获取长令牌才可以访问.所以前端一定是要请求认证服务,拿着短令牌,获取到长令牌.然后才可以访问微服务  还一个是网关,我们现在啥都没做,网关就是统一拦截到微服务的请求,校验用户身份是否合法,网关这里如果校验用户身份非法了 就把用户的请求拒绝了,后面的微服…
下面要完成  5.6两个步骤 3.3.4 资源服务授权 3.3.4.1 资源服务授权流程 资源服务拥有要访问的受保护资源,客户端携带令牌访问资源服务,如果令牌合法则可成功访问资源服务中的资 源,如下图: 上图的业务流程如下: 1.客户端请求认证服务申请令牌 2.认证服务生成令牌 认证服务采用非对称加密算法,使用私钥生成令牌. 3.客户端携带令牌访问资源服务 客户端在Http header 中添加: Authorization:Bearer 令牌. 4.资源服务请求认证服务校验令牌的有效性 资源服…
启动前端和后端.轮播图的数据url可以在这里修改. 找到列表页面的轮播图,然后点击编辑 随便更新一个地址测试 提交后数据再次编辑 发现url没有变化 在pageService里面update方法把更新的字段加上 //更新dataUrlone.setDataUrl(cmsPage.getDataUrl()); 修改了后端的代码,微服务的程序记得要重新启动. 成功后,再次编辑打开这个页面 这样我们就可以通过页面来编辑这个dataUrl字段 添加页面加上dataUrl的字段 在添加页面也没有这个dat…
需要创建mongoDB的配置类1 配置类里面主要创建.GridFSBucket这个对象.这个对象的作用就是用来打开一个下载流 在cms的微服务下,在config下创建MongoConfig.这个时候就需要用到spring的注解.@Configuration.加上这个注解.这个类就相当于是一个Bean. 用这个标识的类,spring的容器子在启动的时候.会扫描到这个Bean,然后就会把这个Bean注册到IOC容器中 这个类就是从配置文件中读取到mongo的database. 在创建GridFSBu…
将模板信息保存在cms_template里面 存储在fs.chunks这个集合中.这个集合里面存的是分块文件. fs.files存的是文件的基本信息 chunks存的是块信息 创建测试文件 在cms的微服务下创建测试类:GridFsTest 用gridFsTemplate的api实现存储 store方法有很多的重载 把模板文件放在D盘 读取这个模板文件存储到gridFS.返回的ObjectID就是文件的ID 在这里对文件进行搜索 mongo4.0里面搜索 5dbeb89bface36388cb8…