@CrossOrigin打破同源策略

@CrossOrigin 是 Spring Framework 提供的一个注解,用于处理跨源资源共享(CORS)。它允许指定哪些源可以访问被注解的控制器或方法,主要用于解决浏览器的同源策略限制。

CORS 简介

CORS(Cross-Origin Resource Sharing)是一种机制,允许在一个域中运行的 Web 应用程序请求另一个域的资源。由于安全原因,浏览器默认只允许同源请求,即请求的源(协议、域名和端口都相同)必须与资源的源相同。使用 @CrossOrigin 注解可以控制哪些来源能够访问你的 API。

@CrossOrigin 的作用

  1. 允许跨域请求:通过设置允许的源,可以使得来自不同域的 Web 应用能够访问你的 API。
  2. 细粒度控制:可以通过配置 HTTP 方法、请求头等来细粒度控制跨域访问。
  3. 简化 CORS 配置:在 Spring Boot 中,使用 @CrossOrigin 注解非常简单,避免了手动配置 CORS 过滤器的复杂性。

如何使用 @CrossOrigin

1. 基本用法

可以在 Controller 类或方法上直接使用 @CrossOrigin 注解:

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@CrossOrigin(origins = "http://example.com") // 允许来自 example.com 的请求
public class MyController {@GetMapping("/api/data")public String getData() {return "Hello from Spring Boot!";}
}
2. 允许多个源

如果需要允许多个源,可以使用逗号分隔:

@CrossOrigin(origins = {"http://example.com", "http://another-example.com"})
3. 允许所有源

如果希望允许来自任何源的请求,可以将 origins 设置为 "*"

@CrossOrigin(origins = "*")
4. 配置其他 CORS 参数

可以通过注解的其他属性来配置更多的 CORS 设置,例如:

  • methods:指定允许的 HTTP 方法,如 GET、POST 等。
  • allowedHeaders:指定允许的请求头。
  • exposedHeaders:指定允许浏览器访问的响应头。
  • allowCredentials:是否允许发送 Cookie,默认为 false。
  • maxAge:指定预检请求的有效期(单位为秒)。

示例:

@CrossOrigin(origins = "http://example.com",methods = {RequestMethod.GET, RequestMethod.POST},allowedHeaders = {"Authorization", "Content-Type"},allowCredentials = "true",maxAge = 3600
)
5. 全局配置 CORS

如果希望为整个应用程序配置 CORS,可以在 Spring Boot 的配置类中使用 WebMvcConfigurer

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允许所有路径.allowedOrigins("http://example.com") // 允许来自 example.com 的请求.allowedMethods("GET", "POST") // 允许 GET 和 POST 方法.allowedHeaders("*") // 允许所有请求头.allowCredentials(true); // 允许发送 Cookie}
}

总结

  • @CrossOrigin 注解在 Spring Boot 中用于处理 CORS,允许跨域请求。
  • 可以在控制器类或方法上使用,灵活配置允许的源、HTTP 方法和请求头。
  • 可用于简化 CORS 配置,避免复杂的过滤器设置。
  • 也可以通过实现 WebMvcConfigurer 全局配置 CORS。

通过使用 @CrossOrigin,你可以轻松地管理跨域请求,确保你的 API 可以被需要的前端应用安全访问。

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

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

相关文章

资产管理系统:SpringBoot技术实现

企业资产管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了企业资产管理系统的开发全过程。通过分析企业资产管理系统方面的不足,创建了一个计算机管理企业资产管理系统的方案。文章介绍了企…

I.MX6U 裸机开发5.准备C环境并用C语言控制LED

I.MX6U 裸机开发5.准备C环境并用C语言控制LED 一、C运行环境1. 设置处理器模式2. CPSR 寄存器CPSR 寄存器结构模式位MRS 指令MSR 指令 3. 设置SP指针设置 SP 指针示例 保存和恢复 SP 指针示例 4. 跳转到C语言 二、程序编写1. 启动文件 start.S2. main.h 定义寄存器3. 主程序mai…

c++设计模式demo

模式设计原则 依赖倒置原则 ⾼层模块不应该依赖低层模块,⼆者都应该依赖抽象 ; 抽象不应该依赖具体实现,具体实现应该依赖于抽象; ⾃动驾驶系统公司是⾼层,汽⻋⽣产⼚商为低层,它们不应该互相依赖&#x…

【go从零单排】泛型(Generics)、链表

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在Go语言中,泛型(Generics)允许你编写可以处理…

Web前端开发--HTML语言

文章目录 前言1.介绍2.组成3.基本框架4.常见标签4.1双标签4.1.1.标题标签4.2.2段落标签4.1.3文本格式化标签4.1.4超链接标签4.1.5视频标签4.1.6 音频标签 4.2单标签4.2.1换行标签和水平线标签4.2.2 图像标签 5.表单控件结语 前言 生活中处处都有网站,无论你是学习爬…

数据结构-图的概念

不存在空图现象,顶点集不能为空,边集可以为空 研究链接一个顶点的边有多少条非常有意义 无向图的度边的二倍 有向图的入度出度,度边数 有向图一致 重点 子图必须联通,尽可能多的边和结点 对于一个生成树,他有n个节点就有n-1条边 修路问题将各个村庄相连,由于经费有限,只能选择…

TDengine 签约蘑菇物联,改造通用设备工业互联网平台

在当前工业互联网迅猛发展的背景下,企业面临着日益增长的数据处理需求和智能化转型的挑战。通用工业设备的高能耗问题愈发突出,尤其是由这些设备组成的公辅能源车间,亟需更高效的解决方案来提升设备运行效率,降低能源消耗。为此&a…

LSM-TREE和SSTable

一、什么是LSM-TREE LSM Tree 是一种高效的写优化数据结构,专门用于处理大量写入操作 在一些写多读少的场景,为了加快写磁盘的速度,提出使用日志文件追加顺序写,加快写的速度,减少随机读写。但是日志文件只能遍历查询…

vue3使用easy-player播放hls监控流

easy-player未发布在npm上,只能采用静态引入方式,老版本不支持v3 1. 在public文件夹下放入EasyPlayer-element.min.js 和 EasyPlayer.wasm 文件 2. 在根目录index.html引入 这样在vue文件中可以使用easy-player 标签 附件

【VScode】C/C++多文件夹下、多文件引用、分别编译——仅一个设置【适合新人入手】

【VScode】C/C多文件夹内的多文件引用编译 1、问题2、前提(最简环境)3、核心(关键配置)4、成功享用~ 1、问题 在使用 VScode 编写一个简单项目的时候,没有特别配置的情况下,若主文件(.c)引用了自定义的头文…

【数据集】【YOLO】【目标检测】交通事故识别数据集 8939 张,YOLO道路事故目标检测实战训练教程!

数据集介绍 【数据集】道路事故识别数据集 8939 张,目标检测,包含YOLO/VOC格式标注。数据集中包含2种分类:{0: accident, 1: non-accident}。数据集来自国内外图片网站和视频截图。检测范围道路事故检测、监控视角检测、无人机视角检测、等&…

Scala 的包及其导入

Scala使用包来创建用于模块化程序的命名空间。通过在Scala文件的顶部声明一个或多个包名称可以创建包,另一种声明包的方式是使用0,这种方式可以嵌套包,并且提供更好的范围与封装控制。对于包的导入,Scala与Java的区别之一便是&…

使用 HuggingFace 提供的 Elasticsearch 托管交叉编码器进行重新排名

作者:来自 Elastic Jeff Vestal 了解如何使用 Hugging Face 的模型在 Elasticsearch 中托管和执行语义重新排序。 在这篇简短的博文中,我将向你展示如何使用 Hugging Face 中的模型在搜索时在你自己的 Elasticsearch 集群中执行语义重新排序。我们将使用…

深究JS底层原理

一、JS中八种数据类型判断方法 在JavaScript中,数据类型分为两大类:基本(原始)数据类型和引用(对象)数据类型。 基本数据类型(Primitive Data Types) 基本数据类型是表示简单的数…

C++虚继承演示

在继承中如果出现: 这种情况,B和C都继承了A,D继承了B、C 在D中访问A的成员会出现: 这样的警告 是因为在继承时A出现两条分支:ABD、ACD 编译器不知道访问的A中的元素是经过B继承还是C继承 所以B、C在继承A时要用到…

【1】虚拟机安装

1.安装VMware WorkStation Pro VMware下载地址: 密钥:YF390-0HF8P-M81RQ-2DXQE-M2UT6 2.新建虚拟机 centos7下载地址:centos-7.9.2009-isos-x86_64安装包下载_开源镜像站-阿里云

【机器学习】均方误差根(RMSE:Root Mean Squared Error)

均方误差根(Root Mean Squared Error,RMSE)是机器学习和统计学中常用的误差度量指标,用于评估预测值与真实值之间的差异。它通常用于回归模型的评价,以衡量模型的预测精度。 RMSE的定义与公式 给定预测值 和实际值 …

python可视化进阶

引用: 首先需要安装 plotnine from plotnine import* import joypy数据可视化进阶操作 3.1 类别数据可视化 【例3-1】——绘制简单条形图 【代码框3-1】——绘制简单条形图 # 图3-1的绘制代码 import pandas as pd import matplotlib.pyplot as plt from cvxpy …

玩的花,云产品也能拼团了!!!

说起拼单大家都不陌生,电商一贯的营销手段,不过确实可以给消费者省下一笔钱。双11到了,腾讯云产品也玩起了拼团,这明显是对开发人员和各企业的福利。 对于有云产品需求的个人或企业,这次绝对是难得的一次薅羊毛机会。…

设计模式-七个基本原则之一-开闭原则 + SpringBoot案例

开闭原则:(SRP) 面向对象七个基本原则之一 对扩展开放:软件实体(类、模块、函数等)应该能够通过增加新功能来进行扩展。对修改关闭:一旦软件实体被开发完成,就不应该修改它的源代码。 要看实际场景,比如组内…