Spring Boot如何配置CORS支持

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: falseallowed-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 {@Beanpublic 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.hqwc.cn/news/128745.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp 在uni.scss 根据@mixin定义方法 、通过@include全局使用

在官方文档中提及到uni.scss中变量的使用&#xff0c;而我想定义方法&#xff0c;这样写css样式更方便 一、官方文档的介绍 根据官方文档我知道&#xff0c;在这面定义的变量全局都可使用。接下来我要在这里定义方法。 二、在uni.scss文件中定义方法 我在uni.scss文件中定义了…

分类预测 | MATLAB实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测

分类预测 | MATLAB实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测 目录 分类预测 | MATLAB实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现POA-CNN鹈鹕算法优化卷积神经网络多特征分类预测&#xff0…

头戴式耳机什么牌子最好?头戴式耳机推荐性价比高

脖子上挎个头戴式作为随身装备&#xff0c;不仅给服装配饰添加了潮流感&#xff0c;还可以可以随时聆听音乐&#xff0c;随着广大消费者的生活水平不断提高&#xff0c;市面上的头戴式耳机越来越多。 选择头戴式耳机时无非就是听音质、看外观、舒适度等等&#xff0c;那么头戴…

QT UI控件汇总介绍

按钮 ToolButton 和pushbutton没什么区别&#xff0c;可以用来设置图标 设置展示策略 RadioButton 一般用Container可以将其框起来设置互斥域&#xff0c;推荐选用GroupBox 使用方法 qDebug()<<ui->radioButton_3->isChecked(); CheckBox 可以勾选三态 stat…

主从复制的实现方案

读写分离技术架构图 实现读写分离的技术架构选型如上;需要自己去实践主从复制;为了节省资源&#xff0c;当然系统并发量并没有那么大,选择一主一丛;强制读主库,为了解决主从同步延迟带来的影响&#xff1b;对于实时性要求高的强制读主库&#xff1b;GTID 主要是一种事务标识技术…

【多线程进阶】线程安全的集合类

文章目录 前言1. 多线程环境使用 ArrayList2. 多线程环境使用队列3. 多线程环境使用哈希表3.1 HashTable3.2 ConcurrentHashMap 总结 前言 本文主要讲解 Java 线程安全的集合类, 在之前学习过的集合类中, 只有 Vector, Stack, HashTable, 是线程安全的, 因为在他们的关键方法中…

【debian 12】:debian系统切换中文界面

目录 目录 项目场景 基础参数 原因分析 解决方案 1.ctrlaltT 打开终端 2.查询当前语言环境&#xff08;我的已经设置成了中文 zh_CN.UTF-8&#xff09; 3.打开语言配置界面 4.最后一步&#xff1a;重启 不要放弃任何一个机会&#xff01; 项目场景&#xff1a; 这两…

【Linux基础】Linux的基本指令使用(超详细解析,小白必看系列)

&#x1f449;系列专栏&#xff1a;【Linux基础】 &#x1f648;个人主页&#xff1a;sunnyll 目录 &#x1f4a6; ls 指令 &#x1f4a6; pwd指令 &#x1f4a6;cd指令 &#x1f4a6;touch指令 &#x1f4a6;mkdir指令&#xff08;重要&#xff09; &#x1f4a6;rmdir指令…

产品需求分析师的基本职责

产品需求分析师的基本职责1 职责 1、主要对用友司库云产品进行调研及产品规划; 2、根据司库云业务需求进行详细需求的用户故事、原型设计、需求分析、详细需求文档编写等; 3、进行产品的需求管理、需求验证、产品演示等需求工作; 4、配合开发、UE人员完成对产品的开发任务;…

MOM与MES管理系统有哪些本质上的区别

随着企业业务的不断发展&#xff0c;许多制造企业开始面临车间管理失控、生产不透明等问题。这时候&#xff0c;很多企业选择上线MES生产管理系统来提高生产管理水平。然而&#xff0c;随着企业业务的不断拓展&#xff0c;MES系统也逐渐暴露出其局限性。于是&#xff0c;MOM平台…

高端品牌如何利用软文抓住顾客的心?

如今高端品市场价值巨大&#xff0c;但之前由于“口罩”影响和冲击&#xff0c;高端品牌的线上销售份额占比较少&#xff0c;同时得益于互联网和新媒体技术的发展&#xff0c;高端品的利润来源大多数是线上推广进行销售&#xff0c;而软文就是高端品常用的推广方式&#xff0c;…

(五)激光线扫描-位移台标定

线激光属于主动测量方式,但是由于线激光的特性,我们只能通过提取激光中心线获取这一条线上的高度信息,那么要进行三维重建的话,就需要通过平移或者是旋转的方式,来让线激光扫描被测物体的完整轮廓,也就是整个表面。激光线的密度越高还原出来的物体越细腻,但由于数据量大…