4 认证接口开发 4.1 需求分析 用户登录的流程图如下: 执行流程: 1.用户登录,请求认证服务 2.认证服务认证通过,生成jwt令牌,将jwt令牌及相关信息写入Redis,并且将身份令牌写入cookie 3.用户访问资源页面,带着cookie到网关 4.网关从cookie获取token,并查询Redis校验token,如果token不存在则拒绝访问,否则放行 5.用户退出,请求认证服务,清除redis中的token,并且删除cookie中的token 使用redis存储用户的身份令牌有以下作…
测试接口 因为继承了spring  security会拦截这个请求,我们需要写代码 让他对这个认证接口放行 查看代码发现之前已经写过放行的代码了 发现是路径前面少了auth 加断点,测试.申请令牌 redis里面的存储 测试cookie 因为cookie绑定了域名 上面再配置一个认证服务的地址 重启nginx 再次访问,地址换成xuecheng.com的地址.就看到了写入了cookie 认证接口开发完成.…
远程 调用Spring Security来申请令牌,然后把申请到令牌存储到redis里面 cookieMaxAge: ‐1   -1表示浏览器一关闭cookie就失效. 测试远程申请令牌 TestClient 注入RestTemplate,来实现远程调用 令牌请求的地址是40400局势当前auth项目的端口. 认证服务最终会把自己注册到eureka 所以远程调用,建议从eureka中来拿地址.注入LoadBalancerClient,这是客户端负载均衡器,用来请求eureka拿到请求列表,从中选…
4.3 认证服务 4.3.1 需求分析 认证服务需要实现的功能如下: 1.登录接口 前端post提交账号.密码等,用户身份校验通过,生成令牌,并将令牌存储到redis. 将令牌写入cookie. 2.退出接口 校验当前用户的身份为合法并且为已登录状态. 将令牌从redis删除. 删除cookie中的令牌. 业务流程如下: userJwt是user的扩展类 loadUserByUsername这个方法是谁调用的?是Spring security框架自动调用的,这个方法会返回一个UserDetail…
补充controller方法 判断是否有值传过来. 私有方法存储cookie httpOnly设置为false的话 浏览器就拿到这个cookie 拿到Response cookie在配置文件内的配置 改成xuecheng.com controller注入域名 注入cookie的有效期 主方法调用 最后返回LoginResult…
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 进入cmd命令行,进入Redis-x64-3.2.100目录. redis‐server redis.windows.conf 出现 下图说明 redis启动成功: 注册为服务: redis‐serve…
定义AuthController 实现刚才写的api接口 controller定义热requestMapping 是 / 就可以了. 因为我们的登陆跟路径就是/auth. 这样到login就是 /auth/userlogin 定义Service 在controller里面注入Service.我们需要在service里面定义申请令牌的方法authService.里面需要账号.密码.clientId和CLientSecret clientId和clientApp已经在配置文件内配置好了.可以直接注入…
这是轮播图的原始文件 运行门户需要把 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.3 Spring security Oauth2认证解决方案 本项目采用 Spring security + Oauth2完成用户认证及用户授权,Spring security 是一个强大的和高度可定制的身 份验证和访问控制框架,Spring security 框架集成了Oauth2协议,下图是项目认证架构图: 1.用户请求认证服务完成认证. 2.认证服务下发用户身份令牌,拥有身份令牌表示身份合法. 3.用户携带令牌请求资源服务,请求资源服务必先经过网关. 4.网关校验用户身份令牌的合法,不…
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 什么是网关? 服务网关是在微服务前边设置一道屏障,请求先到服务网关,网关会对请求进行过虑.校验.路由等处…
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这个对象为空了 这里变量写错…
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是网站的跟路径 课程管理的微服务名称是这个名称 配…