微擎可以做企业网站吗,潍坊建设企业网站,百度指数的基本功能,wordpress postmeta表文章目录 网关的功能搭建网关服务路由断言工厂Route Predicate Factory路由过滤器 GatewayFilter过滤器执行顺序跨域问题处理 网关的功能
网关功能#xff1a;
身份认证和权限校验服务路由、负载均衡请求限流 在SpringCloud中网关的实现包括两种#xff1a;
gatewayzuul
… 文章目录 网关的功能搭建网关服务路由断言工厂Route Predicate Factory路由过滤器 GatewayFilter过滤器执行顺序跨域问题处理 网关的功能
网关功能
身份认证和权限校验服务路由、负载均衡请求限流 在SpringCloud中网关的实现包括两种
gatewayzuul
Zuul 是基于 Servlet 的实现属于阻塞式编程。而 SpringCloudGateway 则是基于 Spring5 中提供的 WebFlux属于响应式编程的实现具备更好的性能。 搭建网关服务
搭建网关服务的步骤
创建新的 module引入 SpringCloudGateway 的依赖和nacos的服务发现依赖
!-- nacos服务发现依赖--
dependencygroupIdcom.alibaba.cloud/groupIdartifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId
/dependency
!-- 网关gateway依赖--
dependencygroupIdorg.springframework.cloud/groupIdartifactIdspring-cloud-starter-gateway/artifactId
/dependency编写路由配置及 nacos 地址
server:port: 10010 # 网关端口spring:application:name: gatewaycloud:nacos:server-addr: localhost:8848 # nacos地址gateway:routes:- id: user-service # 路由标识必须唯一uri: lb://userservice # 路由的目标地址predicates: # 路由断言判断请求是否符合规则- Path/user/** # 路由断言判断请求路径是否️以/user开头如果是则符合- id: order-serviceuri: lb://orderservicepredicates:- Path/order/**启动 gateway 服务与其它服务访问 gateway可以看到 gateway 将我们的请求进行了路由 路由断言工厂Route Predicate Factory
网关路由可以配置的内容包括
路由id路由唯一标示uri路由目的地支持lb和http两种predicates路由断言判断请求是否符合要求符合则转发到路由目的地filters路由过滤器处理请求或响应
我们在配置文件中写的断言规则只是字符串这些字符串会被 Predicate Factory 读取并处理转变为路由判断的条件
例如 Path/user/** 是按照路径匹配这个规则是由org.springframework.cloud.gateway.handler.predicate.PathRoutePredicateFactory 类来处理的
像这样的断言工厂在SpringCloudGateway还有十几个 路由过滤器 GatewayFilter
GatewayFilter 是网关中提供的一种过滤器可以对进入网关的请求和微服务返回的响应做处理 Spring提供了31种不同的路由过滤器工厂。例如 给所有进入userservice的请求添加一个请求头Truthitcast is freaking awesome!
实现方式在gateway中修改application.yml文件给userservice的路由添加过滤器 如果要对所有的路由都生效则可以将过滤器工厂写到default下。格式如下 全局过滤器的作用也是处理一切进入网关的请求和微服务响应与GatewayFilter的作用一样。
区别在于GatewayFilter通过配置定义处理逻辑是固定的。而GlobalFilter的逻辑需要自己写代码实现。
定义方式实现GlobalFilter接口。 定义全局过滤器拦截并判断用户身份
需求定义全局过滤器拦截请求判断请求的参数是否满足下面条件
参数中是否有authorizationauthorization参数值是否为admin
如果同时满足则放行否则拦截
自定义类实现 GlobalFilter 接口添加 Order 注解
过滤器执行顺序
请求进入网关会碰到三类过滤器当前路由的过滤器、DefaultFilter、GlobalFilter
请求路由后会将当前路由过滤器和DefaultFilter、GlobalFilter合并到一个过滤器链集合中排序后依次执行每个过滤器 每一个过滤器都必须指定一个int类型的order值order值越小优先级越高执行顺序越靠前。GlobalFilter通过实现Ordered接口或者添加Order注解来指定order值由我们自己指定路由过滤器和defaultFilter的order由Spring指定默认是按照声明顺序从 1 递增。当过滤器的order值一样时会按照 defaultFilter 路由过滤器 GlobalFilter的顺序执行。
可以参考下面几个类的源码来查看 跨域问题处理
跨域域名不一致就是跨域主要包括
域名不同 www.taobao.com 和 www.taobao.org 和 www.jd.com 和 miaosha.jd.com域名相同端口不同localhost:8080和localhost8081
跨域问题浏览器禁止请求的发起者与服务端发生跨域ajax请求请求被浏览器拦截的问题 解决方案CORS
网关处理跨域采用的同样是CORS方案并且只需要简单配置即可实现