微服务网关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'"