Spring Cloud Gateway配置路由和跨域
阿新 • • 發佈:2021-01-17
一 基本配置
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);
}
}
注意:去掉後端的所有跨域配置
四完整的路由配置
1yml配置
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'"