Spring Boot如何配置CORS支持

news2024/10/6 8:24:59

Spring Boot如何配置CORS支持

CORS(跨源资源共享)是一种Web浏览器的安全性功能,用于控制网页上的脚本文件从不同的源加载其他网页资源。在开发现代Web应用程序时,通常需要跨域请求不同的资源,如API服务或其他Web应用程序。本文将介绍如何在Spring Boot应用程序中配置CORS(跨源资源共享)支持,以允许跨域请求。

在这里插入图片描述

什么是CORS?

CORS(跨源资源共享)是一种安全性特性,用于控制浏览器是否允许Web页面中的JavaScript代码从不同的源加载其他网页资源。在默认情况下,浏览器不允许跨源请求,以防止跨站点请求伪造(CSRF)攻击。但在某些情况下,例如从前端应用程序向后端API发送HTTP请求时,需要解除跨源限制,这就需要CORS支持。

Spring Boot中的CORS支持

Spring Boot提供了简单而强大的方式来配置CORS支持,允许您定义哪些跨域请求是允许的,哪些是被禁止的。在Spring Boot中,您可以通过注解或配置文件来配置CORS策略。

使用注解配置CORS

在Spring Boot中,您可以使用@CrossOrigin注解来配置CORS策略。该注解可以应用在控制器方法上,也可以应用在整个控制器类上。以下是一个使用注解配置CORS的示例:

@RestController
@RequestMapping("/api")
public class MyController {

    @GetMapping("/data")
    @CrossOrigin(origins = "http://localhost:8080")
    public ResponseEntity<String> getData() {
        // 处理请求并返回响应
        return ResponseEntity.ok("Hello from the server!");
    }
}

在上述代码中,@CrossOrigin注解用于getData方法,指定了允许跨域请求的源。在这个例子中,只允许来自http://localhost:8080的请求访问该接口。

使用配置文件配置CORS

除了使用注解,您还可以通过在application.propertiesapplication.yml中定义属性来配置CORS策略。以下是一个使用配置文件配置CORS的示例:

application.properties中:

# 允许所有源访问该接口
spring.mvc.cors.allow-credentials=false
spring.mvc.cors.allowed-headers=*
spring.mvc.cors.allowed-methods=GET,POST,PUT,DELETE
spring.mvc.cors.allowed-origins=*
spring.mvc.cors.exposed-headers=Authorization,Link,X-Total-Count
spring.mvc.cors.max-age=3600

application.yml中:

spring:
  mvc:
    cors:
      allow-credentials: false
      allowed-headers: "*"
      allowed-methods: "GET,POST,PUT,DELETE"
      allowed-origins: "*"
      exposed-headers: "Authorization,Link,X-Total-Count"
      max-age: 3600

在上述配置中,我们允许了所有源的跨域请求,定义了允许的HTTP方法、允许的请求头、允许的暴露头部和最大缓存时间。

高级CORS配置

除了基本的CORS配置,Spring Boot还提供了更高级的配置选项,以便更精细地控制CORS策略。您可以使用CorsConfigurationSource接口来自定义CORS配置。

以下是一个示例,演示如何创建一个自定义CorsConfigurationSource来根据请求路径动态配置CORS策略:

@Configuration
public class CustomCorsConfiguration {

    @Bean
    public CorsConfigurationSource corsConfigurationSource() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowedOrigins(Arrays.asList("http://localhost:8080"));
        config.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE"));
        config.setAllowedHeaders(Arrays.asList("*"));
        config.setExposedHeaders(Arrays.asList("Authorization", "Link", "X-Total-Count"));
        config.setMaxAge(3600L);
        
        // 根据路径动态配置CORS策略
        source.registerCorsConfiguration("/api/**", config);
        
        return source;
    }
}

在上述示例中,我们创建了一个自定义CorsConfigurationSource Bean,并根据请求路径(此处是/api/**)动态配置CORS策略。

运行Spring Boot应用程序

现在,您已经配置了CORS支持,可以运行您的Spring Boot应用程序并测试CORS功能。使用以下命令启动Spring Boot应用程序:

./mvnw spring-boot:run

或者使用Maven Wrapper:

mvn spring-boot:run

您的Spring Boot应用程序将在默认端口(通常是8080)上启动。

测试CORS策略

您可以使用浏览器的开发者工具或工具(例如Postman)来测试CORS策略。尝试从不同的源(例如http://localhost:8080http://localhost:3000)发出HTTP请求,以确保CORS策略按预期工作。

总结

在现代Web开发中,CORS(跨源资源共享)是一个重要的安全特性,用于控制跨域请求。Spring Boot提供了多种配置CORS策略的方式,可以根据您的需求来选择。在开发Web应用程序时,确保正确配置CORS策略,以便允许跨域请求,并保持您的应用程序的安全性和可用性。希望本文对您有所帮助,让您更好地理解如何在Spring Boot中配置CORS支持。 Happy coding!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1069353.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

STM32CubeMX学习笔记-RTC实时时钟使用

STM32CubeMX学习笔记-RTC实时时钟使用 一、RTC简介二、新建工程三、RTC3.1 选择时钟3.3 生成代码3.5 添加读取时间函数 原创链接 1 一、RTC简介 实时时钟&#xff08;RTC&#xff09; 是一个独立的 BCD 定时器/计数器。 RTC 提供具有可编程闹钟中断功能的日历时钟/日历。RTC 还…

java开源商城免费搭建 VR全景商城 saas商城 b2b2c商城 o2o商城 积分商城 秒杀商城 拼团商城 分销商城 短视频商城

1. 涉及平台 平台管理、商家端&#xff08;PC端、手机端&#xff09;、买家平台&#xff08;H5/公众号、小程序、APP端&#xff08;IOS/Android&#xff09;、微服务平台&#xff08;业务服务&#xff09; 2. 核心架构 Spring Cloud、Spring Boot、Mybatis、Redis 3. 前端框架…

flume安装

安装之前要先注意一下版本兼容,就是jdk的版本与flume的版本 下载flume压缩包 Index of /dist/flume (apache.org)https://archive.apache.org/dist/flume/然后解压到一个目录,以/opt/moudle为例 进入/opt/moudle/apache-flume-1.9.0-bin/conf cp flume-env.sh.template flu…

SM5401是一款锂电池电源管理芯片

简介&#xff1a; SM5401 是一款集成锂电池充电管理&#xff0c; LED 指示功能&#xff0c;升压转换器的移动电源管理芯片&#xff0c;外围只需极少的元件&#xff0c;就可以组成功能强大的移动电源方案。 SM5401 内部集成了 0.8A 的线性充电模式&#xff0c;支持对 0V 电池充电…

第八章 排序 八、堆的插入与删除

一、插入元素 二、删除元素 1、删除元素13&#xff0c;将堆底元素填充到空处 2、为满足小根堆的特性&#xff0c;要让46不断下坠 三、总结

紧固行业内卷严重,张友君的飞沃科技能独善其身吗?

文&#xff5c;新熔财经 作者&#xff5c;文泽 “历经转折”的飞沃科技(301232.SZ)于今年6月&#xff0c;登陆资本市场。 公开资料显示&#xff0c;飞沃科技主要从事风电类高强度紧固件业务&#xff0c;主要产品包括预埋螺套、整机螺栓、锚栓组件。公司的实际控制人是张友君…

mysql-执行计划

1. 执行计划表概述 id相同表示加载表的顺序是从上到下。 id不同id值越大&#xff0c;优先级越高&#xff0c;越先被执行。id有相同&#xff0c;也有不同&#xff0c;同时存在。 id相同的可以认为是一组&#xff0c;从上往下顺序执行&#xff1b;在所有的组中&#xff0c;id的值…

移远通信5G RedCap模组现网实测再获新成果!携手行业伙伴加速5G产业成熟发展

近日&#xff0c;移远通信联合中国移动、爱立信、高通等产业链合作伙伴&#xff0c;在湖南岳阳5G现网中成功完成了基于5G RedCap 模组&#xff0c;开展的行业首个连接建立、数据传输、语音通话等功能测试。这也意味着&#xff0c;移远通信在推动RedCap产业成熟与应用落地上&…

秋日氛围 VoxEdit 大赛

将您的创造力提升到一个新的水平。在这个美妙的季节性 VoxEdit 比赛中释放您惊人的体素设计技能。 下载 VoxEdit 开始创作吧&#xff01; 主题&#xff1a;秋天的颜色无处不在。红色、黄色和橙色。南瓜、树叶和温暖舒适的毛衣。创造一个秋天相关的资产。无论是一个穿着秋季衣…

基于安卓android微信小程序的校园求职系统

运行环境 开发语言&#xff1a;Java 框架&#xff1a;ssm JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09; 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&a…

虚拟环境搭建、后台项目创建及目录调整、封装logger、封装全局异常、封装Response、后台数据库创建

1 虚拟环境搭建 #1 虚拟环境作用多个项目&#xff0c;自己有自己的环境&#xff0c;装的模块属于自己的# 2 使用pycharm创建-一般放在项目路径下&#xff1a;venv文件夹-lib文件夹---》site-package--》虚拟环境装的模块&#xff0c;都会放在这里-scripts--》python&#xff0…

Flink---12、状态后端(HashMapStateBackend/RocksDB)、如何选择正确的状态后端

星光下的赶路人star的个人主页 大鹏一日同风起&#xff0c;扶摇直上九万里 文章目录 1、状态后端&#xff08;State Backends&#xff09;1.1 状态后端的分类&#xff08;HashMapStateBackend/RocksDB&#xff09;1.2 如何选择正确的状态后端1.3 状态后端的配置 1、状态后端&am…

人工智能(AI)技术的行业应用

人工智能&#xff08;AI&#xff09;技术具有广泛的应用潜力&#xff0c;几乎可以应用于各个行业和领域。以下是一些AI技术在不同行业中的主要应用领域&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。…

DM宣传单制作,利用在线模板,快速替换文字

如果你需要制作一批宣传单&#xff0c;但是时间很紧&#xff0c;而且没有专业的设计人员协助&#xff0c;那么你可以选择使用在线模板来快速制作宣传单。本文将介绍如何使用乔拓云平台&#xff0c;快速制作宣传单的方法。 步骤一&#xff1a;选择适合的在线制作工具 首先&…

【刷题笔记10.6】LeetCode:翻转二叉树

LeetCode&#xff1a;翻转二叉树 一、题目描述 给你一颗二叉树的根节点root&#xff0c;翻转这颗二叉树&#xff0c;并返回其根节点。 二、分析 我们在做二叉树题目时候&#xff0c;第一想到的应该是用 递归 来解决。 仔细看下题目的 输入 和 输出&#xff0c;输出的左右…

leetCode 300.最长递增子序列 动态规划 + 图解

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&#…

WebKit Inside: CSS 样式表的匹配时机

WebKit Inside: CSS 的解析 介绍了 CSS 样式表的解析过程&#xff0c;这篇文章继续介绍 CSS 的匹配时机。 无外部样式表 内部样式表和行内样式表本身就在 HTML 里面&#xff0c;解析 HTML 标签构建 DOM 树时内部样式表和行内样式就会被解析完毕。因此如果 HTML 里面只有内部样式…

unity脚本_GameObject c#

新创建一个脚本 Test02 让场景中除了空物体GameObject全部失活 再将Test02挂载在空物体上 获取成员变量 首先获取挂载脚本的场景物体上的名字 当然也可以修改场景上物体的名字 也可以判断检测场景上的物体是否被激活 我们也可以检测场景上的物体是否静态 检测层级 检测标签 …

JavaScript笔记:数组

1 数组介绍 2 创建数组 3 删减元素 4 切片 5 数组是一个object 6 排序 如果sort里面的函数返回值&#xff1a; 返回值 小于 0 &#xff0c;则v1 会被排在 v2 之前如果返回值 等于 0 &#xff0c;则 v1 和 v2 的位置不变如果返回值 大于 0 &#xff0c;则 v2 会被排在 v1 之前

java进阶-第9章-JDBC

一、引言 数据库访问层 该层所做事务直接操作数据库&#xff0c;针对数据的增添、删除、修改、更新、查找等。 简单的说法就是实现对数据表的Select&#xff0c;Insert&#xff0c;Update&#xff0c;Delete的操作。如果要加入ORM的元素&#xff0c;那么就会包括对象和数据表之…