微服務網關3-配置路由和跨域


一、基本配置

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中按照名稱獲取微服務

uri: lb://service-edu   #lb:表示在集群環境下通過負載均衡的方式調用

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、跨域配置

package com.atguigu.guli.infrastructure.apigateway.config;

@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/**
- 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/**  

2、前端配置

(1)修改guli-site中 utils/request.js,BASE_API指定到網關地址

baseURL: 'http://127.0.0.1:9110',

(2)所有的api模塊中的baseURL可以刪除
(3)guli-admin上傳相關表單中action地址的修改

data中定義:

BASE_API: process.env.BASE_API

html中使用:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM