Spring Cloud Gateway配置路由和跨域

一 基本配置

1 路由和断言

application.yml文件中添加路由配置

  • -:表示数组元素,可以配置多个节点

  • id:配置的唯一标识,可以和微服务同名,也可以起别的名字,区别于其他 Route。

  • uri:路由指向的目的地 uri,即客户端请求最终被转发到的微服务。

  • predicates:断言的作用是进行条件判断,只有断言都返回真,才会真正的执行路由。

  • Path:路径形式的断言。当匹配这个路径时,断言条件成立

  • /**:一个或多个层次的路径

spring:
  cloud:
    gateway:
      routes:
      - id: service-edu
        uri: http://localhost:8110
        predicates:
        - Path=/user/**

2 测试网关路由转发

访问:http://localhost:9110/user/info

请求转发到:http://localhost:8110/user/info

二 通过nacos注册中心

1 网关中添加依赖

<!--服务注册-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2 主类添加注解

@EnableDiscoveryClient

3 添加nacos配置

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 # nacos服务地址

4 添加gateway配置

spring:
  cloud:
    gateway:
      discovery:
        locator:
          enabled: true # gateway可以发现nacos中的微服务

5 修改uri配置

将uri的地址修改成注册中心中的微服务地址,网关将从nacos中按照名称获取微服务

lb:表示在集群环境下通过负载均衡的方式调用

uri: lb://service-edu

6 测试

访问:http://localhost:9110/user/info

7 匹配多个path

- Path=/user/**, /*/edu/**

三 跨域配置

1 前端配置

修改guli-admin中 config/dev.env.js,BASE_API指定到网关地址

BASE_API: '"http://127.0.0.1:9110"',

2 删除后端跨域配置

此时可以删除微服务中的跨域注解 @CrossOrigin

例如 service_edu中 LoginController的跨域注解

3 后端配置跨域

@Configuration
public class CorsConfig {
    @Bean
    public CorsWebFilter corsFilter() {
        CorsConfiguration config = new CorsConfiguration();
        config.addAllowedMethod("*");
        config.addAllowedOrigin("*");
        config.addAllowedHeader("*");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
        source.registerCorsConfiguration("/**", config);
        return new CorsWebFilter(source);
    }
}

注意:去掉后端的所有跨域配置

四 完整的路由配置

1 yml配置

routes:
- id: service-edu
  uri: lb://service-edu
  predicates:
  - Path=/user/**, /*/edu/**
  filters:
  - SetStatus=250 #修改返回状态码
- id: service-cms
  uri: lb://service-cms
  predicates:
  - Path=/*/cms/**
- id: service-oss
  uri: lb://service-oss
  predicates:
  - Path=/*/oss/**
- id: service-sms
  uri: lb://service-sms
  predicates:
  - Path=/*/sms/**
- id: service-trade
  uri: lb://service-trade
  predicates:
  - Path=/*/trade/**
- id: service-ucenter
  uri: lb://service-ucenter
  predicates:
  - Path=/*/ucenter/**
- id: service-vod
  uri: lb://service-vod
  predicates:
  - Path=/*/vod/**
- id: service-statistics
  uri: lb://service-statistics
  predicates:
  - Path=/*/statistics/**

2 前端配置

a 所有的api模块中的baseURL可以删除

b guli-admin上传相关表单中action地址的修改

data中定义:

BASE_API: process.env.BASE_API

html中使用:

:action="BASE_API+'/admin/oss/file/upload?module=avatar'"

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章