当前位置: 首页 > news >正文

合肥瑶海区寒假兼职工网站建设临海营销型网站建设

合肥瑶海区寒假兼职工网站建设,临海营销型网站建设,如何制作线上投票,服装网站建设定制文章目录 1. 前言2. 搭建网关服务3. 路由断言工厂4. 路由过滤器4.1 普通过滤器4.2 全局过滤器4.3 过滤器执行顺序 5. 跨域问题处理 1. 前言 通过前面的学习我们知道#xff0c;通过 Feign 就可以向指定的微服务发起 http 请求#xff0c;完成远程调用。但是这里有一个问题通过 Feign 就可以向指定的微服务发起 http 请求完成远程调用。但是这里有一个问题我的微服务好像谁来都可以访问这样会不会不安全那是肯定的。 实际生产中有很多的业务模块只有我们内部的人才能用不是谁都能访问这时候我们就需要对用户的身份进行验证而这个验证的工作就是网关Gateway来完成的。 一切请求一定要先到网关再到微服务其实是对微服务的一种保护措施。 1网关功能 ① 身份认证和权限校验认证通过后再将请求转发到对应的微服务 ② 服务路由根据请求信息判断应该将请求转发到哪个微服务 ③ 负载均衡对外的服务也会有多个实例需要做负载均衡 ④ 请求限流限制微服务的用户请求量 注意 Ribbon 是对内部的 userserver 做负载均衡而网关是对外部的 orderserver 做负载均衡 2网关的技术实现 ① gataway新技术响应式编程非阻塞式性能好吞吐能力强 ② zuul较早的技术基于 Servlet阻塞式性能差 2. 搭建网关服务 ① 创建新的 module引入 SpringCloudGateway 的依赖和 Nacos 的服务发现依赖 dependencies!--nacos服务注册发现依赖--dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId/dependency!--网关gateway依赖--dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId/dependency /dependencies② 创建启动类 ③ 编写路由配置及 Nacos 地址路由配置由三部分组成路由 id、目标地址和路由断言路由断言其实就是匹配规则 路由断言判断请求是否符合要求符合则转发到路由目的地。 server:port: 10010 #网关端口 spring:application:name: gateway #服务名称cloud:nacos:server-addr: localhost:8848 #nacos地址gateway:routes: #网关路由配置- id: user-server #路由id自定义只要唯一即可uri: lb://userserver #路由的目标地址lb就是负载均衡后面跟服务名predicates: #路由断言也就是判断请求是否符合路由规则的条件- Path/user/** #只要以/user/开头就符合要求- id: order-serveruri: lb://orderserverpredicates:- Path/order/**路由不止一个用 - 来表示路由数组 ④ 依赖冲突报错 如果你的 spring-boot-starter-web 依赖是写到父工程里的那么不出意外的话启动 GatewayApplication 时将会报错 翻译过来就是 SpringMVC 的依赖冲突了SpringCloudGateway 的内部是通过 nettywebflux 实现的而 webflux 实现和 SpringMVC 的配置依赖是有冲突的。 解决办法有两种 第一种就是去除父工程中的 spring-boot-starter-web 这个依赖 然后在各个子工程需要的地方进行单独引入依赖即可 第二种就是在 pom.xml 中进行修改用以下依赖替换原来的 spring cloud gateway。 !--网关gateway依赖-- dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactIdexclusionsexclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/exclusionexclusiongroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-webflux/artifactId/exclusion/exclusions /dependency⑤ 启动项目测试一下访问 http://localhost:10010/order/2 整体流程 用户发起 http://localhost:10010/user/2 请求接着该请求进入网关而网关是无法处理具体业务的所以它会基于路由规则去做判断然后代理到具体的服务上去处理业务。 上面步骤中我们定义了两个路由规则以 user 开头的路径将会被代理到 userserver 服务接着网关会拿着服务名userserver去找 Nacos 拉取服务列表然后做一个负载均衡发送请求 http://localhost:10010/user/2。 网关只是负责检验并转发请求而最终处理业务的是具体的服务 3. 路由断言工厂 我们在配置文件中写的断言规则只是字符串这些字符串会被断言工厂读取并处理最终转变为路由判断的条件。 Spring 提供了 11 种基本的 Predicate 工厂 Path 是我们用的最多的方式 测试一下时间设在 2031 年之后才可以访问所以现在肯定是不能访问的 只有当断言规则都满足的时候才能访问成功路径符合但时间不符合照样不能访问。 4. 路由过滤器 4.1 普通过滤器 GatewayFilter 是网关中提供的一种过滤器可以处理进入网关的请求以及微服务返回的响应。 路由之后并不是立即向微服务发起请求的其实我们还可以给路由配置各种各样的过滤器这些过滤器最终会形成一个过滤器链对进入网关的请求做各种处理。 请求给了微服务微服务处理完之后会返回一个结果这个结果也是先到达网关网关同样会通过过滤器逐层处理这个响应结果最终返回给用户。 断言匹配成功相当于请求通过了网关的大门然后过滤器会对请求做一些处理比如添加请求头、请求参数等最后网关会将处理好的请求代理到具体的服务做业务处理。 Spring 提供了 31 种不同的路由过滤器工厂 做一个测试我们可以在 Controller 中获取一下请求头并在控制台输出 如果要对所有的路由都生效则可以将过滤器工厂写到 default-filters 中与 routes 处于同一级 4.2 全局过滤器 全局过滤器即自定义过滤器全局过滤器的作用也是处理一切进入网关的请求和微服务响应与 GatewayFilter 的作用一样。区别在于 GatewayFilter 通过配置定义处理逻辑是固定的而 GlobalFilter 的逻辑需要自己写代码实现 定义方式是实现 GlobalFilter 接口。 做一个案例定义全局过滤器拦截请求判断请求的参数是否满足下面两个条件 ① 参数中是否有 authorization ② authorization 的参数值是否为 admin。 如果同时满足则放行否则拦截。 ① 创建 AuthorizeFilter 类实现 GlobalFilter 接口并重写 filter 方法 第一个参数用于处理业务逻辑第二个参数是用来放行的把请求委托给下一个过滤器去处理其实就是调用下一个过滤器的 filter 方法等同于放行。 ② 编写核心代码 过滤器之间是有先后执行顺序的这个我们可以通过注解的方式设置也可以通过实现 Ordered 接口的方式来设置数值越小优先级越高 package com.zxe.gateway;import org.springframework.cloud.gateway.filter.GatewayFilterChain; import org.springframework.cloud.gateway.filter.GlobalFilter; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; import org.springframework.http.HttpStatus; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.stereotype.Component; import org.springframework.util.MultiValueMap; import org.springframework.web.server.ServerWebExchange; import reactor.core.publisher.Mono;//定义过滤器执行的顺序数值越小优先级越高 //可以通过注解设置也可以通过实现Ordered接口来设置 //Order(-1) Component public class AuthorizeFilter implements GlobalFilter, Ordered {Override // exchange请求上下文里面可以获取Request、Response等信息 // chain用来把请求委托给下一个过滤器 // return表示当前过滤器业务结束public MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {//1.获取请求参数ServerHttpRequest request exchange.getRequest();MultiValueMapString, String params request.getQueryParams();//2.获取参数中的authorization参数String auth params.getFirst(authorization);//3.判断参数是否等于adminif (admin.equals(auth)) {//4.等于admin放行其实是调用下一个过滤器的filter方法等同于放行return chain.filter(exchange);}//5.不等于就拦截后面的业务不会再继续我们一般会设置状态码返回给用户提示未登录exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}//定义过滤器执行的顺序数值越小优先级越高Overridepublic int getOrder() {return -1;} }③ 重启项目我们可以在请求路径中携带 authorization 参数测试一下无 authorization 参数或参数值不正确的一律被拦截只有当 authorization admin 时才会被放行 整体流程 ① 用户请求进入网关断言匹配失败报 404 错误匹配成功直接将请求送入过滤器链 ② 过滤器分为普通过滤器和自定义过滤器普通过滤器可以在配置文件中设置自定义过滤器需要实现 GlobalFilter 接口它可以处理更复杂的过滤业务 ③ 过滤不通过的请求就会被拦截报401错误只有层层过滤都通过了请求才会被路由到具体的服务上处理具体的业务。 4.3 过滤器执行顺序 请求进入网关会碰到三类过滤器当前路由过滤器、默认过滤器和全局过滤器。 查看当前路由过滤器和默认过滤器的源码知道它们的过滤器工厂首先会读取配置文件然后生成一个真正的过滤器 GatewayFilter。再看全局过滤器的源码可以看到 GlobalFilter 其实是被 GatewayFilterAdapter 适配到 GatewayFilter 的也就是说网关中所有的过滤器都是 GatewayFilter 类型的。既然是同一种类型那么就可以把它们放到同一个集合里面去排序。 所以请求路由后会将当前路由过滤器和默认过滤器、全局过滤器合并到一个过滤器链集合中排序后依次执行每个过滤器。 每个过滤器都必须指定一个 int 类型的 order 值order 值越小优先级越高执行顺序就越靠前。 GlobalFilter 通过实现 Ordered 接口或者添加 Order 注解来指定 order 值过滤器的执行顺序由我们自己指定。而当前路由过滤器和默认过滤器的执行顺序是由 Spring 指定的默认按照声明顺序从 1 开始递增这里需要注意的是当前路由过滤器和默认过滤器是分开计数的这就会出现计数冲突的问题比如都是 1。 源码里面的默认过滤器是先加载的然后再加载当前路由过滤器最后加载全局过滤器组织过滤器链。所以当过滤器的 order 值一样时会按照 默认过滤器 当前路由过滤器 全局过滤器的顺序执行。 5. 跨域问题处理 域名不一致就是跨域主要包括 ① 域名不同www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com ② 域名相同端口不同。localhost:8080 和 localhost:8081 跨域问题浏览器禁止请求的发起者与服务端发生跨域 ajax 请求请求被浏览器拦截。 网关处理跨域采用的是 CORS 方案CORS的底层逻辑网关其实已经帮我们做好了我们只需要简单的配置即可实现。 spring:cloud:gateway:globalcors: #全局的跨域处理add-to-simple-url-handler-mapping: true #解决options请求被拦截的问题cors-configurations:[/**]:allowedOrigins: #允许哪些网站的跨域请求- http://localhost:8090- http://www.leyou.comallowedMethods: #允许的跨域ajax的请求方式- GET- POST- DELETE- PUT- OPTIONSallowedHeaders: * #允许在请求中携带的头信息allowCredentials: true #是否允许携带cookiemaxAge: 360000 #这次跨域检测的有效期
http://www.zqtcl.cn/news/399358/

相关文章:

  • 山东省住房与建设厅网站首页有名的wordpress主题商
  • 常州市金坛区网站建设毕业设计代做淘宝好还是网站好
  • 品牌网站建设营销型网站设计网站整合方案
  • 网站开发设计师网站代理什么意思
  • 网站层级关系邯郸品牌商标vi设计策划公司
  • 网站开发产品需求说明小网站代码
  • 苏州网站推广排名网站建设方案范文8篇
  • 自己做考试题目网站广州番禺区美食攻略
  • 广州做网站如何如何制作一个网页
  • 网站定制开发收费标准是多少网站代码优化方案
  • 制作卡牌的网站深圳正规煤气公司
  • 手表网站哪家好网站用图片
  • 群辉nas 做网站wordpress linux 中文
  • 平面设计素材网站排名巩义网站建设方案表
  • 延庆网站制作搜索引擎优化的基础是什么
  • 管理手机网站商城网站备案流程
  • 怀化买房网站网站广告js代码添加
  • 做网站 帮别人卖服务器wordpress主题多页面
  • 代理游戏网站潍坊市建设工程管理处网站
  • 大同推广型网站建设网站规划建设与管理维护第二版答案
  • 做网站需要代码吗户外媒体网站建设免费
  • 做什么网站国外做图标网站
  • 网站建设技术部职责门户网站工作总结
  • 用个人电脑做服务器建网站急切网头像在线制作图片
  • 企业网站制作教程浙江省住房和城乡建设厅网站
  • 一个网络空间如何做两个网站哪个网站兼职做设计比较好
  • jquery代码做的网站免费搭建网站模板
  • 铁路建设监理协会官方网站邯郸市网
  • 马鞍山集团网站建设客流分析系统公司
  • 淘客网站怎么做啊抖音怎么挂小程序赚钱