1. 网关的路由转发功能
在前后端分离的项目中,网关服务可以将前端的相关请求转发到相应的后端微服务中。
2. 网关微服务的配置
首先需要创建一个网关微服务,并添加依赖。
<!-- 网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>
<!--服务注册-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-openfeign-core</artifactId>
</dependency>
随后,需要在application.yml配置相关的参数。如下图,id表示微服务名称,uri表示目标服务的地址,uri后面的lb表示采用负载均衡的方式,predicates为路由条件,Predicate 接受⼀个输⼊参数,返回⼀个布尔值结果。
server:
port: 80 # 服务端口
spring:
profiles:
active: dev # 环境设置
application:
name: service-gateway # 服务名
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos服务地址
gateway:
discovery:
locator:
enabled: true # gateway可以发现nacos中的微服务,并自动生成转发路由
#路由转发配置
routes:
- id: service-core
uri: lb://service-core
predicates:
- Path=/*/core/**
- id: service-sms
uri: lb://service-sms
predicates:
- Path=/*/sms/**
- id: service-oss
uri: lb://service-oss
predicates:
- Path=/*/oss/**
3 解决跨域问题
需要创建Config类来处理跨域问题。
@Configuration
public class CrossOriginConfig {
@Bean
public CorsWebFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true); // 是否允许携带cookie
config.addAllowedOrigin("*"); // 可接受的域,是一个具体域名或者*(代表任意域名)
config.addAllowedHeader("*"); // 允许携带的头
config.addAllowedMethod("*"); // 允许访问的方式
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return new CorsWebFilter(source);
}
}