Spring Boot如何实现跨域资源共享(CORS)?

在这里插入图片描述

🍅 作者简介:哪吒,CSDN2021博客之星亚军🏆、新星计划导师✌、博客专家💪

🍅 哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

🍅 技术交流:定期更新Java硬核干货,不定期送书活动

🍅 点击文末名片,关注公众号【哪吒编程】,回复 1024 ,获取《10万字208道Java经典面试题总结(附答案)》2024修订版pdf,背题更方便,一文在手,面试我有

目录

    • Spring Boot如何实现跨域资源共享(CORS)?
      • 方法一:使用@CrossOrigin注解
      • 方法二:配置全局CORS
      • 总结一下,Spring Boot 中如何解决跨域问题 ?

嗨,你好呀,我是哪吒。

Spring Boot如何实现跨域资源共享(CORS)?

方法一:使用@CrossOrigin注解

在控制器类或者具体的方法上使用@CrossOrigin注解。这个注解是Spring框架自带的,用于允许跨域访问。

@RestController
public class MyController {@CrossOrigin(origins = "http://example.com") // 允许指定域名的跨域请求@GetMapping("/api/data")public ResponseEntity<?> getData() {// ...}
}

你还可以使用通配符来允许所有域名的跨域请求:

@CrossOrigin(origins = "*") // 允许所有域名的跨域请求

方法二:配置全局CORS

创建一个配置类,使用WebMvcConfigurer的实现来全局配置CORS。

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/api/**") // 允许跨域请求的路径.allowedOrigins("http://example.com") // 允许的域名列表.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的HTTP方法.allowedHeaders("*") // 允许的HTTP头.allowCredentials(true) // 是否允许证书(cookies).maxAge(3600); // 预请求的有效期}
}

同样,你也可以使用通配符来允许所有域名:

registry.addMapping("/api/**").allowedOrigins("*")// 其他配置...

注意事项:

  • 使用@CrossOrigin注解时,它只影响带有该注解的控制器或方法。
  • 使用全局CORS配置时,它会影响所有未明确拒绝的跨域请求。
  • 出于安全考虑,生产环境中应该明确允许的域名,而不是使用通配符*。
  • CORS配置中的allowedHeaders参数应该明确指定所需的头信息,而不是使用*,以减少安全风险。

通过以上两种方法,你可以在Spring Boot应用中实现跨域资源共享,从而允许不同域的前端应用访问你的后端服务。

总结一下,Spring Boot 中如何解决跨域问题 ?

在Spring Boot中解决跨域问题,可以采用以下几种方法:

  1. 使用@CrossOrigin注解:可以在控制器类或方法上添加@CrossOrigin注解来允许特定的跨域请求。这个注解支持指定允许的源、方法、头部等信息。
  2. 通过配置文件:在application.properties或application.yml中添加全局的CORS配置,以允许所有域的跨域请求或者限制只允许特定的域名进行跨域请求。
  3. 自定义CorsFilter:创建一个CorsFilter类,实现Filter接口,并在doFilter方法中添加CORS相关的响应头。然后在Spring Boot的主配置类中注册这个过滤器。
  4. 使用WebMvcConfigurer:通过实现WebMvcConfigurer接口的addCorsMappings方法,可以更细致地控制哪些路径需要CORS支持。
  5. 利用第三方库:也可以使用如cors-filter等第三方库来简化CORS配置过程。
  6. 使用ResponseEntity:在返回ResponseEntity时,可以手动设置Access-Control-Allow-Origin等响应头来实现跨域。
  7. 使用全局异常处理:通过全局异常处理机制,捕获特定的异常并设置相应的CORS响应头。
  8. 使用Spring Security:如果项目中使用了Spring Security,还需要确保Spring Security的配置不阻止跨域请求。
  9. 使用代理服务器:在某些情况下,也可以通过设置代理服务器来解决跨域问题,但这通常不是首选方案。
  10. 使用JSONP:对于GET请求,还可以考虑使用JSONP来绕过浏览器的同源策略,但这仅适用于GET请求,并且需要在前端和后端都进行相应的配置。
  11. 使用服务端路由:在服务端使用路由机制,将请求转发到不同的域,从而避免直接跨域。
  12. 使用WebSocket:对于实时通信,可以考虑使用WebSocket协议,它不受同源策略的限制。

跨域问题是由于浏览器的同源策略引起的,它要求只有来自同一源(协议+域名+端口)的脚本才能访问某些资源。在开发前后端分离的应用时,跨域问题是一个常见的挑战,因此了解如何在Spring Boot中解决这个问题是非常重要的。


🏆文章收录于:Spring Boot 进阶实战

哪吒数年工作总结之结晶。

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

点击下方名片,回复1024,获取《10万字208道Java经典面试题总结(2024修订版).pdf 》

在这里插入图片描述

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

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

相关文章

1.k8s:架构,组件,基础概念

目录 一、k8s了解 1.什么是k8s 2.为什么要k8s &#xff08;1&#xff09;部署方式演变 &#xff08;2&#xff09;k8s作用 &#xff08;3&#xff09;Mesos&#xff0c;Swarm&#xff0c;K8S三大平台对比 二、k8s架构、组件 1.k8s架构 2.k8s基础组件 3.k8s附加组件 …

5种算法简单介绍:贪心算法、分治法、回溯法、动态规划法、最大流算法

1. 贪心算法&#xff08;Greedy Algorithm&#xff09; 定义&#xff1a; 贪心算法是一种在每一步选择中都采取在当前状态下最好或最优&#xff08;即最有利&#xff09;的选择&#xff0c;从而希望导致结果是全局最好或最优的算法。贪心算法并不是对所有问题都能得到整体最优…

【STM32-存储器映射】

STM32-存储器映射 ■ STM32F1-4G地址空间分成8个块■ STM32F1-Block0■ STM32F1-Block1■ STM32F1-Block2■ STM32F1- ■ STM32F1-4G地址空间分成8个块 ■ STM32F1-Block0 有出厂 BootLoader 就可以使用串口下载程序。如Keil5图中IROM地址是0x8000000 开始 就是flash地址 ■ S…

使用方法——注意事项及好处

public class MethodDemo01 {public static void main(String[] args) {// 目标&#xff1a;掌握定义方法的完整性&#xff0c;清楚使用方法的好处。// 需求&#xff1a;假如现在有很多程序员都要进行2个整数求和的操作。//1、李工。int rs sun(10,20);System.out.println(&q…

低代码开发平台赋能智慧警务管理:创新引领下的安全新篇章

随着信息技术的飞速发展&#xff0c;智慧警务管理已经成为维护社会治安、保障人民安全的重要手段。在这一背景下&#xff0c;低代码开发平台以其高效、灵活、易用的特性&#xff0c;为智慧警务管理注入了新的活力。本文将探讨低代码开发平台在智慧警务管理中的应用&#xff0c;…

vue-codemirror的简单使用

功能 代码编辑器 安装 命令行&#xff1a;npm install codemirror vue-codemirror --save 单文件引入 import { Codemirror } from vue-codemirror 单文件展示 <codemirrorv-model"localCode"class"code-mirror":placeholder"placeholder&qu…

[vscode] 自定义log快捷生成代码

1、进入设置页面&#xff1a;文件>首选项>用户代码片段>选择设置的语言。 2. 关于代码段显示位置的调整设置 文件>首选项>设置&#xff0c;搜索代码段或snippetSuggestions&#xff0c;修改为”top”; 参考&#xff1a; vscode自定义log快捷生成代码

vue 设置定时器在某个时间段执行

业务需求&#xff1a;数据大屏页面中的某个方法需要在今天12:00执行一次&#xff0c;或是在今天的17:00执行一次&#xff0c; 这里用到 setTimeout定时器来实现。 //获取某个时间的时间戳 getCurrentDate(time) {let now new Date();let year now.getFullYear();let mont…

直流电机双闭环调速Simulink仿真

直流电机参数&#xff1a; 仿真模型算法介绍&#xff1a; 1&#xff09;三相整流桥&#xff0c;采用半控功率器件SCR晶闸管&#xff1b; 2&#xff09;采用转速环、电流环 双闭环控制算法&#xff1b; 3&#xff09;外环-转速环&#xff0c;采用PI 比例积分控制&#xff1b;…

Java进阶-Lambda

Java进阶-Lambda 前言Lambda表达式什么是Lambda表达式初识Lambda表达式Lambda表达式的简单使用Lambda表达式格式分析与传统接口方法实现的比较 理解Lambda表达式函数式编程非纯函数实例纯函数示例函数式编程在Lambda表达式中的体现 闭包闭包与Lambda表达式的示例 类型推导-匿名…

633. 平方数之和(中等)

633. 平方数之和 1. 题目描述2.详细题解3.代码实现3.1 Python3.2 Java内存溢出溢出代码正确代码与截图 1. 题目描述 题目中转&#xff1a;633. 平方数之和 2.详细题解 本题是167. 两数之和 II - 输入有序数组&#xff08;中等&#xff09;题目的变型&#xff0c;由两数之和变…

数字图像分析(第二部分)

文章目录 第8章 图像分割图像分割定义阈值分割依赖像素的阈值选取Otsus方法依赖区域的阈值选取依赖坐标的阈值选取变化阈值法区域生长法分裂合并方法分水岭算法聚类分割算法K-meansAP算法Graph cut第9章 图像特征表达基于全局特征的图像表达直方图GIST基于局部特征的图像表达简…

ROS中里程计崩溃的原因分析

里程计节点崩溃可能由多种原因引起&#xff0c;以下是一些可能的因素&#xff1a; 1. **场景特征不足**&#xff1a;如果机器人或车辆所处环境缺乏足够的特征&#xff08;如在单调、重复纹理的地面或墙面&#xff09;&#xff0c;视觉里程计等定位方法可能因找不到匹配特征而失…

JavaScript通用下载方法,但jpg图片下载打不开

通用下载方法&#xff0c;通过Blob的方式&#xff0c;访问Url地址&#xff0c;下载对应的图片&#xff0c;excel等文件。 axios({method: "get",url,responseType: "blob",}).then((res: any) > {const link document.createElement("a");co…

安装IIS报错 0x8024402C

我在windows2012上安装.NET 运行环境时&#xff0c; 先安装的sqlserver&#xff0c; 然后提示缺少framework3.5的安装之类的。 然后又进行IIS和.NET运行库framework的安装&#xff0c;结果也提示安装失败&#xff0c;错误代码0x8024402C。 我照着网上的帮助卸载了sqlserver 并…

前端打包配置+nginx配置实现部署及部署地址带特定前缀的几种方式

前端打包后要部署到服务器&#xff0c;在浏览器中可以通过url访问到我们开发的系统&#xff0c;通过nginx代理在工作中是一种很常用的方式。 这里以本地为例&#xff0c;把本地电脑当作一个服务器&#xff0c;实现普通部署、带特定前缀等 前端使用vue-clivue作为例子 以下内容…

第2次作业

问题&#xff1a;cs与msf权限传递&#xff0c;以及mimikatz抓取win2012明文密码。 一、CS与MSF权限传递 CS&#xff08;Cobalt Strike&#xff09;和MSF&#xff08;Metasploit Framework&#xff09;是两种常用的渗透测试工具&#xff0c;它们都支持在渗透过程中传递权限。以…

1.3 Sqoop 数据同步工具详细教程

Apache Sqoop 是一个开源工具&#xff0c;用于在 Apache Hadoop 和关系型数据库&#xff08;如 MySQL、Oracle、PostgreSQL 等&#xff09;之间高效传输数据。Sqoop 可以将结构化数据从关系型数据库导入到 Hadoop 的 HDFS、Hive 和 HBase 中&#xff0c;也可以将数据从 Hadoop …

git 多分支实现上传文件但避免冲突检测

文章目录 背景实现步骤 背景 对于某些通过命令生成的配置文件&#xff08;如 TypeScript 类型文件等&#xff09; 实现步骤 1

背包问题(动归)

目录 问能否能装满背包&#xff08;或者最多装多少&#xff09;&#xff1a;dp[j] max(dp[j], dp[j - nums[i]] nums[i]); 对应题目如下&#xff1a; 416.分割等和子集 (物品正序&#xff0c;背包倒序) 问装满背包有几种方法&#xff1a;dp[j] dp[j - nums[i]] &#xff…