• Getaway


    Getaway

    依赖和基本配置

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-gateway</artifactId>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4
    server:
      port: 8888
    spring:
      application:
        name: api-gateway
      cloud:
        gateway:
          routes: #数组形式 所以可以配置多个  
            - id: order-service #路由唯⼀标识  一般是要转发的服务名
              uri: http://127.0.0.1:8087 #想要转发到的地址 ip和对应id(服务)的端口号一致
              order: 1 #优先级,数字越⼩优先级越⾼
              predicates: #断⾔ 配置哪个路径才转发
                - Path=/order-server/**
              filters: #过滤器,请求在传递过程中通过过滤器修改
                - StripPrefix=1 #去掉第⼀层前缀  这里是去掉order-server 不然无法访问
              #访问路径 http://localhost:8888/order-server/api/v1/video_order/list
              #转发路径 http://localhost:8087/api/v1/video_order/list(中间的order-server已经被过滤器过滤了)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    网关整合nacos实现转发后的负载均衡

    优点:可以进行负载均衡且地址不需要写死直接指向nacos的服务名即可

    添加依赖

            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>
    
    • 1
    • 2
    • 3
    • 4

    启动类添加注解

    @EnableDiscoveryClient
    
    • 1

    配置yml

    server:
      port: 8888
    spring:
      application:
        name: api-gateway
      cloud:
        nacos:
          discovery:
            server-addr: xx.xx.xx.xx:8848  nacos运行的服务器的ip
    
        gateway:
          routes: #数组形式
            - id: order-service #路由唯一标识 一般是要转发的项目名
              #uri: http://127.0.0.1:8087 #想要转发到的地址 ip和对应id(服务)的端口号一致
              uri: lb://xdclass-order-service #从nacos进行转发  lb的意思是负载均衡
              order: 1 #优先级,数字越小优先级越高
              predicates: #断言 配置哪个路径才转发
                - Path=/order-server/**
              filters: #过滤器,请求在传递过程中通过过滤器修改
                - StripPrefix=1 #去掉第⼀层前缀
              #访问路径 http://localhost:8888/order-server/api/v1/video_order/list
              #转发路径 http://localhost:8087/order-server/api/v1/video_order/list
              #需要过滤器去掉前面第一层
    
          discovery:
            locator:
              enabled: true   #开启网关拉取nacos的服务
            # 访问路径 c
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    这时候在需要调用的同一个服务 开启两个不同的端口号(8081.8082)
    访问 http://localhost:8888/order-server/api/v1/video_order/list
    这时候会轮询访问8081和8082端口

    路由断言参数配置

    predicates:
     - Host=
     - Path=/order-server/**  只有这个路径才转发
     - before=2022-8-16T01:01:01.000+08:00   +08是东八区  这里是8.16号之前才能访问 超时之后无法访问
     - Method=
     - Header=
     - Query=source    意思是网址后必须加?source=xxx 不然也无法访问
     - Cookie=
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    实现用户鉴权

    @Component
    public class UserGlobalFilter implements GlobalFilter, Ordered {
        @Override
        public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
            //写业务逻辑
            String token = exchange.getRequest().getHeaders().getFirst("token");
    
            //TODO 根据业务开发对应的鉴权规则
            if(StringUtils.isBlank("token")){
                //设置状态码未授权
                exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
                //已经完成
                return exchange.getResponse().setComplete();
            }
    
            // 如果成功继续往下执行
            return chain.filter(exchange);
        }
    
        //过滤器的优先级 数字越小 优先级越高    
        @Override
        public int getOrder() {
            return 0;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    这时候请求 如果不在Header里面传token那么就无法访问,

  • 相关阅读:
    Java项目:中药药方管理系统(java+SSM+JSP+bootstrap+Mysql)
    MySQL索引
    Web(1) 搭建漏洞环境(metasploitable2靶场/DVWA靶场)
    美创科技勒索病毒“零信任”防护和数据安全治理体系的探索实践
    String(三)———接口大全
    E-奇环(染色判断二分图+简单环判断)
    5_spring-cloud-zuul-网关
    [面试常考]父元素高度坍塌的原因及其解决方法
    低质量图像超分算法 SwinIR: Image Restoration Using Swin Transformer
    java计算机毕业设计内容校园热点新闻推送网站源码+mysql数据库+系统+lw文档+部署
  • 原文地址:https://blog.csdn.net/Andrew0219/article/details/126347195