文章目录

      • 概念解释
      • 使用
      • 跨域配置

添加依赖

 

      <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网关_gateway
客户端向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);
    }
}