不同的微服务一般会有不同的网络地址,而一个功能可能调用多个微服务中的接口。所以采用网关可以解决(客户端多次请求不同的微服务、跨域问题、认证复杂问题《不同的微服务需要独立认证》、受到不同的微服务使用的防火墙等不友好协议问题)

1、什么是网关

  网关(Gateway)又称网间连接器协议转换器。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。

网关是介于客户端和服务器端之间的中间层,所有的外部请求都会先经过 网关这一层

优点:安全、易于监控、易于认证、易于统一授权

2、什么是微服务网关

  微服务网关就是一个系统,通过暴露该微服务网关系统,方便我们进行相关的鉴权,安全控制,日志统一处理,易于监控的相关功能。

3、那些技术可以实现微服务网关

  1)nginx Nginx (engine x) 是一个高性能的HTTP反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务

  2)zuul ,Zuul 是 Netflix 出品的一个基于 JVM 路由和服务端的负载均衡器。

  3)spring-cloud-gateway, 是spring 出品的 基于spring 的网关项目,集成断路器,路径重写,性能比Zuul好。

4、spring项目搭建微服务网关

  4.1、引入依赖   

    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
      </dependency>
      <dependency>
        <groupId>io.jsonwebtoken</groupId>
        <artifactId>jjwt</artifactId>
      </dependency>
    </dependencies>

  4.2、创建引导类   

    @SpringBootApplication
    public class GatewayApplication {

      public static void main(String[] args) {
        SpringApplication.run(GatewayApplication.class,args);
      }
    }

  4.3、配置application.yml

    server:
      port:7777
    spring:
      application:
        name: 微服务名称
      cloud:
        gateway:
          globalcors:
            cors-configurations:
              '[/**]': # 匹配所有请求
              allowedOrigins: "*" #跨域处理 允许所有的域
              allowedMethods: # 支持的方法
              - GET
              - POST
              - PUT
              - DELETE
          routes:
          # 平台管理
          - id: admin
            uri: lb://leadnews-admin
            predicates:
            - Path=/admin/**
            filters:
            - StripPrefix= 1

5、全局过滤器实现jwt校验

   思路分析

    1)用户进入网关登录,网关过滤器进行判断,如果是登录,则路由到后台管理微服务进行登录

    2)用户登录成功,后台签发JWT token信息返回给用户

    3)用户再次登录网关开始访问,网关过滤器接受用户携带的token

    4)网关过滤器解析token,看token是否有权限有效,有放行。

posted on 2021-11-26 16:37  齐天大圣龙卷风  阅读(362)  评论(0编辑  收藏  举报