其他分享
首页 > 其他分享> > Gateway 网关

Gateway 网关

作者:互联网

Gateway

gateway功能:

  1. 身份认证和权限校验

  2. 服务路由(访问哪一个服务),负载均衡(服务之间Ribbon)

  3. 对用户请求限流

gateway的技术实现:

  1. gateway

  2. zuul

*zuul是基于servlet的实现,属于阻塞式编程,

*SpringCloudGateway则是基于Spring5中提供的WebFlux,属于响应式编程的实现,具备更好的性能

网关搭建的步骤

server:
port: 10010 #服务端口
spring:
application:
  name: gateway #服务名称
cloud:
  nacos:
    server-addr: localhost:8848 #nacos 的地址
   #配置网关
  gateway:
    routes: #配置路由,可以配置多个
      - id: user-server  #gateway唯一标识(任意)
        uri: lb://userservice  #lb是loadBalanced的缩写(负载均衡),然后是服务名
        predicates: #断言 boolean表达式 判断请求是否否和路由规则
          - Path=/user/** #符合这个路径的放行
      - id: order-server
        uri: lb://orderserver
        predicates: #可以配置多个
          - Path=/order/**

路由断言工厂Route Predicate Factory

路由过滤器 GatewayFilter

全局过滤器GlobalFilter

package cn.itcast.gateway;


import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
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;

import java.lang.annotation.Annotation;

//@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter , Order {
   @Override
   public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
       //获取请求对象
       ServerHttpRequest request = exchange.getRequest();
       //获取请求参数
       MultiValueMap<String, String> queryParams = request.getQueryParams();
       //获取authorization
       String auth = queryParams.getFirst("authorization");
       //判断是否等于admin
       if ("admin".equals(auth)) {
           //等于放行
           return chain.filter(exchange);
      }
       //拦截
       //禁止访问
//       exchange.getResponse().getStatusCode(HttpStatus.FORBIDDEN);
       //结束处理
       return exchange.getResponse().setComplete();
  }

   @Override
   public int value() {
       return -1;
  }
   @Override
   public Class<? extends Annotation> annotationType() {
       return null;
  }
}

GatewayFilter 的过滤执行顺序

网关的CORS跨域

spring:
cloud:
  gateway:
    globalcors: # 全局的跨域处理
      add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
      corsConfigurations:
        '[/**]':
          allowedOrigins: # 允许哪些网站的跨域请求
            - "http://localhost:8090"
            - "http://www.leyou.com"
          allowedMethods: # 允许的跨域ajax的请求方式
            - "GET"
            - "POST"
            - "DELETE"
            - "PUT"
            - "OPTIONS"
          allowedHeaders: "*" # 允许在请求中携带的头信息
          allowCredentials: true # 是否允许携带cookie
          maxAge: 360000 # 这次跨域检测的有效期
 

 

标签:网关,请求,springframework,gateway,org,import,Gateway,路由
来源: https://www.cnblogs.com/yzlworld/p/16500105.html