• 网关服务


    组件编码 hzero-gateway

    简介

    1. 概述

    基于Zuul的微服务网关服务

    2. 组件坐标

    <dependency>
        <groupId>org.hzero</groupId>
        <artifactId>hzero-gateway</artifactId>
        <version>${hzero.service.version}</version>
    </dependency>
    

    3. 主要功能

    服务配置

    1. 服务配置

    spring:
      # 文件上传大小限制
      http:
        multipart:
          max-file-size: 30MB
          max-request-size: 30MB
      cloud:
        config:
          # 如果设置为 true,当从配置中心获取配置势必,则服务报错无法启动,一般设置为 false 即可
          fail-fast: false
          # 启用配置中心,向配置中心拉去服务路由信息
          enabled: true
          # 配置中心地址
          uri: http://dev.hzero.org:8010
    
    zuul:
      addHostHeader: true
      # Zuul 路由配置,配置文件中的为静态配置
      # 如果启用了配置中心,则从网关获取路由信息;如果不启用配置中心,可将所有路由维护到网关即可。
      routes:
        # 服务简码
        hiam:
          # 路由前缀,与前端接口对应
          path: /iam/**
          # 服务编码
          serviceId: hzero-iam
        hoth:
          # 路由
          path: /oauth/**
          # 服务名
          serviceId: hzero-oauth
          # 去否去掉路由前缀
          stripPrefix: false
          # 自定义敏感头信息
          sensitiveHeaders: none
      # zuul 超时时间
      host:
        connect-timeout-millis: 120000
        socket-timeout-millis: 120000    
    
    hzero:
      gateway:
        ## gateway-helper 配置
        filter:
          collect-span:
            # 是否统计API访问情况
            # 开启此配置会统计每个API的调用次数,数据存储在 Redis 缓存中
            enabled: false
          common-request:
            # 组织级API是否必须检查组织参数
            # 设置为 false 则不强制检查租户级API的 organiztionId 参数
            check-organization: true
            # 项目级API是否必须检查项目参数
            # 设置为 false 则不强制检查项目级API的 projectId 参数
            check-project: true
        helper:
          # 是否打印 JWT
          enabled-jwt-log: false
          # 跳过权限校验的路由
          # 对于需要跳过 gateway-helper 权限校验的路径可加到这个参数列表中
          helper-skip-paths:
            - /oauth/**
            - /swagger/swagger-ui.html
            - /swagger/swagger-resources/**
            - /swagger/webjars/**
            - /swagger/docs/**
            - /hwfe/**
            - /hwfp/editor-app/**
            - /hwfp/lib/**
            - /hwfp/activiti-editor
            - /hwfp-*/editor-app/**
            - /hwfp-*/lib/**
            - /hwfp-*/activiti-editor
            - /hmsg/sock-js/**
      ## 服务整体运维配置
      maintain:
        # 全局运维信息
        global-info:
          state: NORMAL
        # 服务运维信息
        service-maintain-info:
          oauth:
            state: NORMAL
        # 运维接口密钥,不配置则在程序启动时生成随机key
        secret-key: hzero
    
    

    2. 启动类配置

    gateway 的启动类上需排除 SecurityAutoConfiguration 配置类,因为网关只做路由转发,不需要 Security 安全配置。

    @EnableHZeroGateway
    @EnableDiscoveryClient
    @SpringBootApplication(
            exclude = {SecurityAutoConfiguration.class}
    )
    public class GatewayApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(GatewayApplication.class, args);
        }
    
    }
    

    GatewayHelper 鉴权

    1. 鉴权过滤器

    GatewayHelper 组件提供了一组过滤器来对API鉴权,具体可参考 基础服务调用链路

    2. 自定义鉴权

    hzero 提供了 hzero-gateway-helper-api 鉴权接口包 和 hzero-gateway-helper-default 默认实现。

    如果需要对鉴权逻辑进行整体改造,可以通过实现 org.hzero.gateway.helper.api.AuthenticationHelper 接口来完全定制化鉴权的部分。

    如果仅需要对现有鉴权逻辑新增逻辑,可以通过实现 org.hzero.gateway.helper.api.HelperFilter 接口来新增鉴权逻辑。

    3. 权限

    IAM 刷新权限,并缓存到网关所在的 Redis database 下,网关默认 redis.database=4,如果要修改此配置,确保在IAM服务中加入 hzero.service.gateway.redis-db=xx

    整体运维

    1. 功能说明

    整体运维功能用于在服务运维期间提示用户某些服务不可用或全局服务运维,但前提必须保证网关服务可用。运维人员可通过调用网关的运维接口,通过传参设置运维模式和运维信息,或者关闭运维。

    2. 配置样例

    hzero:
      maintain:
        global-info:
          state: NORMAL
        service-maintain-info:
          oauth:
            state: NORMAL
        secret-key: hzero      
    

    配置项介绍:

    #枚举类型: NORMAL、PAUSED、STOPPED
    #分别代表的含义为: 正常运行、暂停服务、停止服务(通常用于将要被废弃的服务)
    hzero.maintain.global-info.state=NORMAL     
    
    #枚举类型如上
    #*表示服务路由前缀,如hzero-oauth服务的路由前缀为/oauth
    hzero.maintain.service-maintain-info.*.state=NORAML
    
    # 运维接口密钥,不配置则在程序启动时生成随机key
    hzero.maintain.secret-key=key
    

    3. 运维方式