• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

SpringCloud搭建Gateway网关

武飞扬头像
生骨大头菜
帮助1

网关的作用:

  • 对用户请求做身份认证、权限校验
  • 将用户请求路由到微服务,并实现负载均衡
  • 对用户请求做限流

开始搭建:

1、创建新的Maven的Module,引入SpringCloudGateway的依赖和Nacos的服务发现依赖

学新通

学新通

学新通

 编辑pom.xml

  1.  
    <!--网关依赖-->
  2.  
    <dependency>
  3.  
    <groupId>org.springframework.cloud</groupId>
  4.  
    <artifactId>spring-cloud-starter-gateway</artifactId>
  5.  
    </dependency>
  6.  
     
  7.  
    <!--nacos服务发现依赖-->
  8.  
    <dependency>
  9.  
    <groupId>com.alibaba.cloud</groupId>
  10.  
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  11.  
    </dependency>

创建启动类:

学新通

学新通

  1.  
    package com.demo.gateway;
  2.  
     
  3.  
    import org.springframework.boot.SpringApplication;
  4.  
    import org.springframework.boot.autoconfigure.SpringBootApplication;
  5.  
     
  6.  
     
  7.  
    @SpringBootApplication
  8.  
    public class GatewayApplication {
  9.  
     
  10.  
    public static void main(String[] args) {
  11.  
    SpringApplication.run(GatewayApplication.class, args);
  12.  
    }
  13.  
     
  14.  
    }

2、添加配置文件application.yml,编写路由配置及nacos地址

  1.  
    server:
  2.  
    port: 10010 # 网关端口
  3.  
    spring:
  4.  
    application:
  5.  
    name: gateway # 服务名称
  6.  
    cloud:
  7.  
    nacos:
  8.  
    server-addr: localhost:8848
  9.  
    gateway:
  10.  
    routes: # 网关路由配置
  11.  
    - id: user-service # 路由id,自定义,只要唯一即可
  12.  
    # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
  13.  
    uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
  14.  
    predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
  15.  
    - Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求
  16.  
    - id: order-service
  17.  
    uri: lb://orderservice
  18.  
    predicates:
  19.  
    - Path=/order/**
学新通

启动并且测试

学新通

学新通

 3、添加自定义的全局过滤器

添加简单的过滤器AuthorizeFilter,判断请求参数中是否有authorization并且值为admin,如果同时满足则放行,否则拦截

学新通

  1.  
    package com.demo.gateway;
  2.  
     
  3.  
    import org.springframework.cloud.gateway.filter.GatewayFilterChain;
  4.  
    import org.springframework.cloud.gateway.filter.GlobalFilter;
  5.  
    import org.springframework.core.Ordered;
  6.  
    import org.springframework.core.annotation.Order;
  7.  
    import org.springframework.http.HttpStatus;
  8.  
    import org.springframework.http.server.reactive.ServerHttpRequest;
  9.  
    import org.springframework.stereotype.Component;
  10.  
    import org.springframework.util.MultiValueMap;
  11.  
    import org.springframework.web.server.ServerWebExchange;
  12.  
    import reactor.core.publisher.Mono;
  13.  
     
  14.  
     
  15.  
    //@Order(-1) // 过滤器的优先级,越小优先级越高
  16.  
    @Component
  17.  
    public class AuthorizeFilter implements GlobalFilter, Ordered {
  18.  
    @Override
  19.  
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
  20.  
    // 1.获取请求参数
  21.  
    ServerHttpRequest request = exchange.getRequest();
  22.  
    MultiValueMap<String, String> params = request.getQueryParams();
  23.  
    // 2.获取参数中的 authorization 参数
  24.  
    String authorization = params.getFirst("authorization");
  25.  
    // 3.判断参数值是否等于 admin
  26.  
    if ("admin".equals(authorization)) {
  27.  
    // 4.是,放行
  28.  
    return chain.filter(exchange);
  29.  
    }
  30.  
    // 5.否,拦截
  31.  
    // 5.1.设置状态码
  32.  
    exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);
  33.  
    // 5.2.拦截请求
  34.  
    return exchange.getResponse().setComplete();
  35.  
    }
  36.  
     
  37.  
    // 通过Ordered接口实现过滤器的优先级,与通过@Order(-1)实现一样
  38.  
    @Override
  39.  
    public int getOrder() {
  40.  
    return -1;
  41.  
    }
  42.  
    }
学新通

 重启gateway服务并测试

学新通

学新通

 过滤器的执行顺序:

学新通

4、网关的cors跨域配置

修改配置文件

  1.  
    server:
  2.  
    port: 10010 # 网关端口
  3.  
    spring:
  4.  
    application:
  5.  
    name: gateway # 服务名称
  6.  
    cloud:
  7.  
    nacos:
  8.  
    server-addr: localhost:8848
  9.  
    gateway:
  10.  
    routes: # 网关路由配置
  11.  
    - id: user-service # 路由id,自定义,只要唯一即可
  12.  
    # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
  13.  
    uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
  14.  
    predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
  15.  
    - Path=/user/** # 这个是按照路径匹配,只要以/user/开头就符合要求
  16.  
    - id: order-service
  17.  
    uri: lb://orderservice
  18.  
    predicates:
  19.  
    - Path=/order/**
  20.  
    globalcors: # 全局的跨域配置
  21.  
    add-to-simple-url-handler-mapping: true # 解决options请求被拦截问题
  22.  
    corsConfigurations:
  23.  
    '[/**]': # 拦截哪些请求,/**表示拦截一切请求
  24.  
    allowedOrigins: # 允许哪些网站的跨域请求
  25.  
    - "http://localhost:8090"
  26.  
    - "http://www.百度.com"
  27.  
    allowedMethods: # 允许的跨域ajax的请求方式
  28.  
    - "GET"
  29.  
    - "POST"
  30.  
    - "DELETE"
  31.  
    - "PUT"
  32.  
    - "OPTIONS"
  33.  
    allowedHeaders: "*"
  34.  
    allowCredentials: true # 是否允许携带cookie
  35.  
    maxAge: 360000 # 这次跨域检测的有限期
学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhfjbajj
系列文章
更多 icon
同类精品
更多 icon
继续加载