文章目录


添加依赖

<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>

application.yml

server:
port: 80
spring:
profiles:
active: dev
application:
name: service-gateway
cloud:
nacos:
discovery:
server-addr: c701:8848
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/**

概念解释

route 路由:路由是网关的基本单位,由id,URI ,一组predicate,一组filter组成,根据predicate进行匹配转发

Predicate(谓语、断言):路由转发的判断条件,目前SpringCloud Gateway支持多种方式,常见如:Path、Query、Method、Header等

Filter(过滤器):过滤器是路由转发请求时所经过的过滤逻辑,可用于修改请求、响应内容

工作流程如下:

gateway网关_sed

客户端向springCloud Gateway发出请求.如果网关处理程序映射确定请求与路由匹配.将其发送到网关web处理程序,此处理程序运行时通过特定于请求的筛选发送请求,过滤器被虚线分隔的原因是过滤器可以在发送代理请求之前,执行所有“预”过滤逻辑,然后发出代理请求,在发出代理请求后,将执行“post”过滤器逻辑

使用


  1. application.yml配置文件方式
  2. 通过@Bean注解RouteLocator方法返回值​

跨域配置

删除微服务中的跨域注解 @CrossOrigin

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

@Configuration
public class CorsConfig {

@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);
}
}