首页 > 其他分享 >Spring Cloud Gateway CORS 方案

Spring Cloud Gateway CORS 方案

时间:2024-09-22 21:52:13浏览次数:8  
标签:配置文件 Spring org 配置 springframework CORS import Gateway Cloud

Spring Cloud Gateway CORS(跨域资源共享)方案主要涉及在网关层面配置CORS策略,以允许前端应用跨域访问后端服务。以下是一个详细的CORS配置方案,包括配置文件(如application.yml)和Java代码配置两种方式。

一、配置文件方式(application.yml)

在Spring Cloud Gateway项目中,通常可以通过编辑application.ymlapplication.properties配置文件来设置CORS策略。以下是一个基于application.yml的配置示例:

spring:
  cloud:
    gateway:
      globalcors:
        corsConfigurations:
          '[/**]': # 匹配所有路径
            allowedOrigins: # 允许访问的源
              - "http://example.com"
              - "http://localhost:3000"
            allowedMethods: # 允许的HTTP方法
              - GET
              - POST
              - PUT
              - DELETE
              - OPTIONS
            allowedHeaders: # 允许在请求中携带的头信息
              - "*"
            allowCredentials: true # 是否允许携带cookie
            maxAge: 3600 # 预检请求的缓存时间(秒)

在这个配置中,allowedOrigins指定了哪些源可以访问后端服务,allowedMethods指定了允许的HTTP方法,allowedHeaders指定了请求头中允许携带的字段,allowCredentials表示是否允许在跨域请求中携带认证信息(如Cookies),maxAge指定了预检请求的缓存时间。

二、Java代码方式

除了配置文件,还可以通过Java代码来配置CORS策略。这通常涉及到创建自定义的GlobalFilterCorsWebFilter。以下是一个通过GlobalFilter实现CORS配置的示例:

import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.Ordered;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpResponse;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;

@Component
public class CorsGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        ServerHttpResponse response = exchange.getResponse();

        // 设置CORS响应头
        response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN, "*");
        response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS, "GET, POST, PUT, DELETE, OPTIONS");
        response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS, "*");
        response.getHeaders().add(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS, "true");

        // 对于OPTIONS请求,直接返回,不继续处理
        if (exchange.getRequest().getMethod().equals(HttpMethod.OPTIONS)) {
            return Mono.empty();
        }

        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        // 设置过滤器的执行顺序
        return Ordered.HIGHEST_PRECEDENCE;
    }
}

然而,需要注意的是,在Spring Cloud Gateway中,更推荐使用配置文件的方式来配置CORS,因为这种方式更加简洁且易于管理。Java代码方式虽然灵活,但在配置复杂性和可维护性方面可能不如配置文件方式。

三、注意事项

  1. 避免重复配置:如果在Gateway中配置了CORS,通常不需要在下游服务中再次配置CORS。
  2. 安全性考虑:设置allowedOrigins时,应尽可能具体地指定允许的源,避免使用"*",以提高安全性。
  3. 缓存控制:通过maxAge设置预检请求的缓存时间,可以减少不必要的预检请求,提高性能。
  4. 测试验证:配置完CORS后,应通过实际请求测试验证配置的有效性。

综上所述,Spring Cloud Gateway提供了灵活的CORS配置方案,可以根据项目的实际需求选择合适的配置方式。

Spring Cloud Gateway CORS 方案_CORS


标签:配置文件,Spring,org,配置,springframework,CORS,import,Gateway,Cloud
From: https://blog.51cto.com/u_15266301/12081746

相关文章

  • 基于SpringBoot+Vue+uniapp的明嘉新材料公司仓库管理的详细设计和实现(源码+lw+部署文
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的在线电影票购买系统的详细设计和实现(源码+lw+部署文档+
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 基于SpringBoot+Vue+uniapp的宿舍管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • Spring Boot利用dag加速Spring beans初始化
    1.什么是Dag?有向无环图(DirectedAcyclicGraph),简称DAG,是一种有向图,其中没有从节点出发经过若干条边后再回到该节点的路径。换句话说,DAG中不存在环路。这种数据结构常用于表示并解决具有依赖关系的问题。DAG的特性首先,DAG中的节点可以有入度和出度。节点的入度是指指向该......
  • 4--SpringBoot项目中分类管理
     目录新增分类分类分页查询启用禁用分类根据类型查询修改分类本文介绍SpringBoot项目中的分类管理,操作类似员工管理模块,具体详解可见以下博客,此处给出各部分代码 2--SpringBoot项目中员工管理详解(一)-CSDN博客 3--SpringBoot项目中员工管理详解(二)-CSDN博客新增......
  • SpringCloud(九)配置中心和消息总线
    ##SpringCloudBusSpringcloudbus通过轻量消息代理连接各个分布的节点。这会用在广播状态的变化(例如配置变化)或者其他的消息指令。Springbus的一个核心思想是通过分布式的启动器对springboot应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式......
  • 前后端分离Vue3+SpringBoot社团活动报名管理系统
    目录功能和开发技术介绍具体实现截图开发核心技术介绍:技术创新点vue3和vue2的区别:核心代码部分展示非功能需求分析系统开发流程系统运行步骤软件测试源码获取功能和开发技术介绍本课题拟采用主流的MVC架构、开发工具idea、java语言编程、MySQL数据库技术、Vue.js技......
  • springboot+java大学周边房屋出租管理系统
    目录项目介绍技术栈具体实现截图开发核心技术:开发工具和技术详细视频演示核心代码部分展示系统设计操作可行性可行性论证系统测试个人心得详细视频演示源码获取方式项目介绍本javaweb+maven项目采用的数据库是Mysql,使用Springboot框架开发,十分方便,也具有跨平台的优......
  • 单机版 ClickHouse 部署和 SpringBoot 程序访问
    ClickHouse是俄罗斯的Yandex于2016年开源的列式存储数据库(DBMS),使用C++语言编写,主要用于在线分析处理查询(OLAP),能够使用SQL查询实时生成分析数据报告。OLAP为联机分析处理,专注于统计查询;OLTP为联机事务处理,专注于增删改。ClickHouse的优势在于单表查询性能高,高吞吐的写入......
  • springboot-ssm-java企业客户关系满意度评价管理系统 o1iv4
    目录项目介绍技术栈具体实现截图开发核心技术:开发工具和技术详细视频演示核心代码部分展示系统设计操作可行性可行性论证系统测试个人心得详细视频演示源码获取方式项目介绍本javaweb+maven项目采用的数据库是Mysql,使用Springboot框架开发,十分方便,也具有跨平台的优......