微服务之gateway网关的简介和使用

Gateway网关简介及使用

  1. 什么是 API 网关(API Gateway)
    分布式服务架构、微服务架构与 API 网关
    在微服务架构里,服务的粒度被进一步细分,各个业务服务可以被独立的设计、开发、测试、部署和管理。这时,各个独立部署单元可以用不同的开发测试团队维护,可以使用不同的编程语言和技术平台进行设计,这就要求必须使用一种语言和平 台无关的服务协议作为各个单元间的通讯方式。

网关的功能:


统一访问路径;
统一鉴权;
流量控制;
熔断;
日志监控。

一. Gateway怎么用

说白了 Predicate 就是为了实现一组匹配规则,方便让请求过来找到对应的 Route 进行处理,接下来我们接下 Spring Cloud GateWay 内置几种 Predicate 的使用。

1.搭建网关工程Spring boot 项目

添加网关服务,和注册发现让其在nocas中注册

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

以此工程下建立admin网关,并且在父
聚合

<modules>
        <module>leadnews-gateway-admin</module>
    </modules>

创建启动类

在这里插入图片描述

2.完成配置类

server:
  port: 6001
spring:
  application:
    name: leadnews-admin-gateway
  cloud:
    nacos:
      server-addr: 172.16.147.129:8848
    gateway:
      globalcors:
        cors-configurations:
          '[/**]': # 匹配所有请求
            allowedOrigins: "*" #跨域处理 允许所有的域
            allowedHeaders: "*"
            allowedMethods: # 支持的方法
              - GET
              - POST
              - PUT
              - DELETE
      routes:
        # 后台管理
        - id: admin
          #被断言到的路由到此服务上进行处理
          uri: lb://leadnews-admin
          #断言,就是进行匹配,我断言你活不过今天,就是这个意思
          predicates:
            - Path=/admin/**
          filters:
          # 去掉请求路径中的一个前缀 从左到右开始 /xxx
          # /admin/channel/list => StripPrefix= 1 => /channel/list
            - StripPrefix= 1
        # 用户微服
        - id: user
          uri: lb://leadnews-user
          predicates:
            - Path=/user/api/v1/**
          filters:
            - StripPrefix=3

【重点解释】

- Path=/admin/**  表示以/admin开头的路径全部路由到admin微服务中
例如:http://localhost:6001/admin/xxx/yyy --->路由到http://9001/xxx/yyy

3.重点–全局过滤器登入校验,身份认证

/**
 * @version 1.0
 * @description 网关统一鉴权
 * @package com.pojke.gatewayadmin.filters
 */
@Component
@Slf4j
public class AuthorizeFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        //1. 获取请求与响应对象
        ServerHttpRequest request = exchange.getRequest();
        ServerHttpResponse response = exchange.getResponse();
        //2. 获取请求路径
        String path = request.getURI().getPath();
        log.info("请求了路径: {}", path);
        //3. 判断是否为登录请求. /admin/login/in  /admin/login/out
        if(path.startsWith("/admin/login")){
            //3.1 如果是登录请求则放行
            return chain.filter(exchange);
        }
        //4. 获取请求头中的token
        String token = request.getHeaders().getFirst("token");
        //5. 对token有效性校验
        if(!StringUtils.isEmpty(token)) {
            //5.1 有效则放行
            if (SystemConstants.JWT_OK == AppJwtUtil.verifyToken(token)) {
                return chain.filter(exchange);
            }
        }
        //6. 无效则拦截,返回401 HttpStatus
        response.setStatusCode(HttpStatus.UNAUTHORIZED);
        return response.setComplete();// 到此为止
    }

    @Override
    public int getOrder() {
        return 0;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值