如何注册域名并建设网站,24小时最新国际新闻,北京南站到故宫最佳路线,网站开发准备流程1、网关的概念#xff1a; 2、网关的功能#xff1a; #xff08;1#xff09;#xff1a;身份认证和权限校验 #xff08;2#xff09;#xff1a;服务路由#xff08;具体的业务路由到具体的服务#xff09;#xff0c;负载均衡#xff08;多台服务的话#xff…1、网关的概念 2、网关的功能 1身份认证和权限校验 2服务路由具体的业务路由到具体的服务负载均衡多台服务的话服务之间进行负载均衡
3请求限流不能超过服务承受的最大请求 3、springcloud中网关实现的两种方式:
1zuul
2gateway
两个的优缺点zuul是基于servlet实现的阻塞式编程而gateway是基于spring5提供的webflux实现的响应式的编程。gateway的性能比较好吞吐量比较好 二、
1、gateway的基本配置
2、路由断言工厂Route Predicates Factory 我们配置文件中配置的路由字符串规则会被factory路由工厂读取然后将这些字符串规则转为判断条件。当有请求进入看这个请求是否符合这些条件。符合则向服务器转发 不符合则返回404 三、路由过滤器GatewayFilter可以对进入网关的请求和微服务的响应做处理
1、局部路由过滤器在相应路由的微服务生效
添加方式 gateway:routes:- id: user-service #路由id唯一即可#uri: http://loaclhost:8080 目标地址也可以是这样但常用的是下方的uri: lb://user-server #路径的目标地址lb负载均衡。user-service是具体的服务名称predicates:- Path/user/**- id: order-serviceuri: lb://order-serverpredicates:- Path/order/**default-filters:- AddRequestHeadertruth,cc is awesome #全局default
# filters:
# - AddRequestHeadertruth,cc is awesome #局部
2、默认路由过滤器default-filters所有的微服务都可以生效 3、全局过滤器GlobalFilter在已经有了一个default-filter全局的情况下为什么还需要这个全局的呢因为全局过滤器可以更好地实现逻辑的处理。default-filter是配置的情况复杂逻辑难以实现所以产生了全局过滤器。
package org.example.filter;import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpHeaders;
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;Component
Order(1) //设置过滤器的等级越小等级越高负数也可以
public class AuthGlobalFilter implements GlobalFilter {Overridepublic MonoVoid filter(ServerWebExchange exchange, GatewayFilterChain chain) {ServerHttpRequest request exchange.getRequest(); //请求requestHttpHeaders headers request.getHeaders();MultiValueMapString, String queryParams request.getQueryParams(); //request中携带的参数String auth queryParams.getFirst(auth); //获取某一个参数if(admin.equals(auth)) //参数相等则继续到下一个过滤器{return chain.filter(exchange); //放行}exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED); //设置响应codereturn exchange.getResponse().setComplete(); //拦截返回}
}4、过滤器的执行顺序局部和默认过滤器的order值为1如果下面有多个则依次增大。
如果全局和局部和默认过滤器的order值相等的话则依次按照默认-局部-全局的执行顺序
五、Gateway的cors的跨域问题
跨域浏览器禁止请求的发起者与服务端发生跨域ajax请求请求被浏览器拦截的问题
跨域出现的情况 不同协议比如从 http://example.com 请求 https://example.com。 不同域名从 http://example.com 请求 http://another-domain.com。 不同端口从 http://example.com:80 请求 http://example.com:8080。
解决方案CORS
spring:cloud:gateway:globalcors: # 全局的跨域处理add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题corsConfigurations:[/**]: #拦截所有请求所有请求都必须经过跨域allowedOrigins: # 允许哪些网站的跨域请求- http://localhost:8090- http://www.leyou.comallowedMethods: # 允许的跨域ajax的请求方式- GET- POST- DELETE- PUT- OPTIONSallowedHeaders: * # 允许在请求中携带的头信息allowCredentials: true # 是否允许携带cookiemaxAge: 360000 # 这次跨域检测的有效期