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.rhkb.cn/news/361596.html

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

相关文章

浔川3样AI产品即将上线!——浔川总社部

浔川3样AI产品即将上线&#xff01; 浔川AI翻译v3.0 即将上线&#xff01; 浔川画板v5.1 即将上线&#xff01; 浔川AI五子棋v1.4 即将上线&#xff01; 整体通告详见&#xff1a;浔川AI五子棋&#xff08;改进&#xff08;完整&#xff09;版1.3&#xff09;——浔川python社…

Java洗鞋预约小程序源码

&#x1f4a5;洗鞋神器来袭&#xff01;轻松预约&#xff0c;让你的鞋子焕然一新&#x1f45f; &#x1f389; 告别洗鞋烦恼&#xff0c;洗鞋预约小程序来啦&#xff01; 你是不是常常为洗鞋而烦恼&#xff1f;手洗太累&#xff0c;送去洗衣店又贵又麻烦。现在&#xff0c;好…

初识Java(二)

初识Java的main方法 1.1 main方法示例 public class world {public static void main(String[] args) {System.out.println("hello,world!");}}通过上述代码&#xff0c;我们可以看到一个完整的Java程序的结构&#xff0c;Java程序的结构由如下三个部分组成&#x…

Day 34:2368. 受限条件下可到达节点的数目

Leetcode 2368. 受限条件下可到达节点的数目 现有一棵由 n 个节点组成的无向树&#xff0c;节点编号从 0 到 n - 1 &#xff0c;共有 n - 1 条边。 给你一个二维整数数组 edges &#xff0c;长度为 n - 1 &#xff0c;其中 edges[i] [ai, bi] 表示树中节点 ai 和 bi 之间存在一…

【广度优先搜索 深度优先搜索 图论】854. 相似度为 K 的字符串

本文涉及知识点 广度优先搜索 深度优先搜索 图论 图论知识汇总 深度优先搜索汇总 CBFS算法 LeetCode 854. 相似度为 K 的字符串 对于某些非负整数 k &#xff0c;如果交换 s1 中两个字母的位置恰好 k 次&#xff0c;能够使结果字符串等于 s2 &#xff0c;则认为字符串 s1 和…

three.js 第十一节 - uv坐标

// ts-nocheck // 引入three.js import * as THREE from three // 导入轨道控制器 import { OrbitControls } from three/examples/jsm/controls/OrbitControls // 导入lil.gui import { GUI } from three/examples/jsm/libs/lil-gui.module.min.js // 导入tween import * as T…

基于Java微信小程序民宿短租系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f;感兴趣的可以先收藏起来&#xff0c;还…

Linux rpm包管理

rpm用于互联网下载包的打包及安装工具&#xff0c;它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具&#xff09;的缩写&#xff0c;类似windows的setup.exe&#xff0c;这一文件格式名称虽然打上了RedHat的标志&am…

【Redis】

Redis 常见面试题 认识 Redis 什么是 Redis&#xff1f; 我们直接看 Redis 官方是怎么介绍自己的。 Redis 官方的介绍原版是英文的&#xff0c;我翻译成了中文后截图的&#xff0c;所以有些文字读起来会比较拗口&#xff0c;没关系&#xff0c;我会把里面比较重要的特性抽出来…

经典游戏案例:仿植物大战僵尸

学习目标&#xff1a;仿植物大战僵尸核心玩法实现 游戏画面 项目结构目录 部分核心代码 using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; using Random UnityEngine.Random;public enum…

STM32启动流程 和 map文件的作用

一&#xff0c;启动流程 1. 复位/上电 2. 根据 BOOT0/BOOT1 确定程序从哪个存储位置执行 3. 初始化 SP 及 PC 指针 将 0X08000000 位置的栈顶地址存放在 SP 指针中 将 0x08000004 位置存放的向量地址装入 PC 程序计数器 4. 初始化系统时钟 5. 初始化用户堆栈 6. 进入main函数 二…

idea中maven新增的配置文件xx.xml没生效问题

项目场景&#xff1a; 因为公司使用自己的私服下载jar,则没有使用默认的settings.xml文件。而是新增了一个settingsold.xml文件 问题描述 公司项目有用自己的私服,Maven正常去私服下载jar包是没问题的。但是一直是去找的阿里云镜像,到导致阿里云镜像找不到相关的jar包报错!!!…

条码二维码读取设备在医疗设备自助服务的重要性

医疗数字信息化建设的深入推进&#xff0c;医疗设备自助服务系统已成为医疗服务领域的一大趋势&#xff0c;条码二维码读取设备作为自助设备的重要组成部分&#xff0c;通过快速、准确地读取条形码二维码信息&#xff0c;不公提升了医疗服务效率&#xff0c;还为患者提供了更加…

CMN-700(1)CMN-700概述

本章介绍CMN-700&#xff0c;这是用于AMBA5 CHI互连&#xff0c;且可根据需要定制的网格拓扑结构。 1. 关于CMN‐700 CMN‐700是一种可配置扩展的一致性互连网络&#xff0c;旨在满足高端网络和企业计算应用中使用的一致性网络系统的功率、性能和面积(PPA)要求。支持1-256个处…

PHP 界的扛把子 Swoole 异步通信利器

大家好&#xff0c;我是码农先森。 引言 我今天主要介绍的内容是包括但不仅限于 Swoole &#xff0c;也有一部分 Go 语言的内容。 为什么要介绍 Swoole ? 先说一说背景吧&#xff0c;我们项目组之前要为《香港 01》开发一个积分系统的项目&#xff0c;这个系统的主要功能包…

【Linux详解】冯诺依曼架构 | 操作系统设计 | 斯坦福经典项目Pintos

目录 一. 冯诺依曼体系结构 (Von Neumann Architecture) 注意事项 存储器的意义&#xff1a;缓冲 数据流动示例 二. 操作系统 (Operating System) 操作系统的概念 操作系统的定位与目的 操作系统的管理 系统调用和库函数 操作系统的管理&#xff1a; sum 三. 系统调…

Ruby langchainrb gem and custom configuration for the model setup

题意&#xff1a;Ruby 的 langchainrb gem 以及针对模型设置的自定义配置 问题背景&#xff1a; I am working in a prototype using the gem langchainrb. I am using the module assistant module to implemente a basic RAG architecture. 我正在使用 langchainrb 这个 ge…

学习入门 chatgpt原理 一

学习文章&#xff1a;人人都能看懂的chatGpt原理课 笔记作为学习用&#xff0c;侵删 Chatph和自然语言处理 什么是ChatGpt ChatGPT&#xff08;Chat Generative Pre-training Transformer&#xff09; 是一个 AI 模型&#xff0c;属于自然语言处理&#xff08; Natural Lang…

深度神经网络(dnn)--风格迁移(简单易懂)

概括 深度神经网络&#xff08;DNN&#xff09;在风格迁移领域的应用&#xff0c;实现了将一幅图像的艺术风格迁移到另一幅图像上的目标。该技术基于深度学习模型&#xff0c;特别是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;通过提取内容图像的内容特征和风格图像的…

SK Hynix 3D DRAM良率突破56.1%,开启存储新时代

根据韩国财经媒体Business Korea独家报道&#xff1a;在刚刚结束的VLSI 2024国际研讨会上&#xff0c;韩国半导体巨头SK Hynix公布了一项振奋人心的进展&#xff1a;其五层堆叠3D DRAM的制造良率已达到56.1%。此成果标志着3D DRAM技术在商业化道路上迈出了坚实的一步&#xff0…