【spring】@CrossOrigin注解学习

@CrossOrigin介绍

@CrossOrigin 是 Spring Framework 中的一个注解,用于处理跨域资源共享(CORS)问题。CORS 是一种机制,它使用额外的 HTTP 头来告诉浏览器,让运行在一个 origin (domain) 上的Web应用被准许访问来自不同源服务器上的指定的资源。当一个资源从与该资源本身所在的服务器不同的域、协议或端口请求一个资源时,资源会发起一个跨域 HTTP 请求。

@CrossOrigin源码


@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface CrossOrigin {@AliasFor("origins")String[] value() default {};@AliasFor("value")String[] origins() default {};String[] originPatterns() default {};String[] allowedHeaders() default {};String[] exposedHeaders() default {};RequestMethod[] methods() default {};String allowCredentials() default "";String allowPrivateNetwork() default "";long maxAge() default -1;}
源代码截图

@CrossOrigin属性介绍

  1. methods: 指定允许的 HTTP 请求方法。默认情况下,如果没有指定,那么所有方法都是被允许的。可以指定如 RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT 等。

    @CrossOrigin(origins = "*", methods = {RequestMethod.GET, RequestMethod.POST})

  2. value与 origins 属性相同,用于指定允许的源列表。在 @CrossOrigin 注解中,value 和 origins 属性是等价的,可以互换使用。

    @CrossOrigin(value= "*", methods = {RequestMethod.GET, RequestMethod.POST})
  3. methods: 指定允许的 HTTP 请求方法。默认情况下,如果没有指定,那么所有方法都是被允许的。可以指定如 RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT 等。

    @CrossOrigin(origins = "*", methods = {RequestMethod.GET, RequestMethod.POST})

  4. allowedHeaders: 指定在预请求(pre-flight request,即 OPTIONS 请求)中允许的自定义头信息。如果不指定,默认只允许简单的请求头。

    @CrossOrigin(origins = "*", allowedHeaders = "X-Custom-Header")
  5. exposedHeaders: 指定哪些响应头可以被客户端的 JavaScript 访问。默认情况下,浏览器只能访问一些简单的响应头。

    @CrossOrigin(origins = "*", exposedHeaders = "X-Custom-Header")
  6. allowCredentials: 指定是否允许携带凭证(如 Cookies)。默认为 false,设置为 true 时,浏览器会将凭证信息(如 Cookies)发送到服务器。

    @CrossOrigin(origins = "*", allowCredentials = "true")
  7. maxAge: 指定浏览器对预请求的缓存时间(以秒为单位)。这可以减少在实际请求之前发送的 OPTIONS 请求的数量。

    @CrossOrigin(origins = "*", maxAge = 3600)

@CrossOrigin注解使用场景

使用场景主要包括以下几种情况:

  1. 前端和后端分离:在现代Web开发中,前端和后端分离是一种常见的架构模式。前端应用可能部署在一个域上,而后端服务部署在另一个域上。在这种情况下,前端应用需要向后端服务发起请求,这就涉及到跨域问题。

  2. 第三方应用集成:如果你的Web服务需要被第三方应用调用,例如,你的API被集成到其他网站中,那么你需要处理来自这些第三方域的请求。

  3. 微服务架构:在微服务架构中,不同的服务可能部署在不同的域上。服务间的通信可能需要处理跨源请求。

  4. 单点登录(SSO):在单点登录系统中,用户登录一个服务后,可以无需重复登录即可访问其他服务。如果这些服务部署在不同的域上,就需要处理跨域请求。

  5. Web组件或插件:如果你开发了一个Web组件或插件,它需要在其他网站上运行,并且需要与你的服务器通信,那么也需要处理跨域问题。

  6. 移动应用后端:移动应用通常与后端服务进行通信,如果移动应用和后端服务的域不同,也需要处理跨域请求。

  7. 本地开发:在本地开发环境中,开发者可能会使用不同的端口或本地服务器地址来模拟生产环境,这时本地开发服务器和前端应用之间也可能存在跨域问题。




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

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

相关文章

虹科Pico汽车示波器 | 免拆诊断案例 | 2017款奔驰E300L车行驶中发动机偶尔无法加速

故障现象 一辆2017款奔驰E300L车,搭载274 920发动机,累计行驶里程约为21万km。车主反映,该车行驶中发动机偶尔无法加速,且车辆发闯。 故障诊断 用故障检测仪检测,发动机控制单元(N3/10)中存储…

HTML5 MathML用法详解

目录 MathML的基本结构MathML元素分类浏览器支持与渲染MathML与LaTeXMathML示例MathML是一种标记语言,用于在网页中表示数学公式和符号。它为数学、科学和技术出版物提供了标准化的、结构化的表示方式,使得复杂的数学表达式能够被浏览器准确解析和渲染。 MathML的基本结构 …

Labelme自定义数据集COCO格式【实例分割】

参考博客 labelme标注自定义数据集COCO类型_labelme标注coco-CSDN博客 LabelMe使用_labelme中所有的create的作用解释-CSDN博客 1制作自己的数据集 1.1labelme安装 自己的数据和上面数据的区别就在于没有.json标签文件,所以训练自己的数据关键步骤就是获取标签文…

Web3探索加密世界:空投常见类型有哪些?附操作教程

每种空投类型都有独特的特征和目的,我们需要了解不同类型的加密空投。本文给大家介绍的是流行的加密货币空投类型,以及一般空投是如何做的。感兴趣的话请看下去。 一、空投常见类型 1、持有者空投 持有者空投向钱包中持有一定数量数字货币的人免费发放…

磐石云PSCC系统如何部署更安全,更便捷呢?

磐石云PSCC系统是一款大型呼叫中心解决方案软件,基于fs做通讯层,经过无数次锤炼而得到目前的稳定性! 先来说说系统所使用的行业;呼出型呼叫中心、房产咨询、教育咨询、电信增值业务、行业应用,医疗保险、金融机构服务&…

2024.05.24 学习记录

1、面经复习: js基础、知识深度、js垃圾回收 2、代码随想录刷题:动态规划 完全背包 all 3、rosebush 完成 Tabs、Icon、Transition组件

基于YOLO系列算法(YOLOv5、YOLOv6、YOLOv8以及YOLOv9)和Streamlit框架的行人头盔检测系统

摘要 本文基于最新的基于深度学习的目标检测算法 (YOLOv5、YOLOv6、YOLOv8)以及YOLOv9) 对头盔数据集进行训练与验证,得到了最好的模型权重文件。使用Streamlit框架来搭建交互式Web应用界面,可以在网页端实现模型对图像、视频和实时摄像头的目标检测功能…

C++中获取int最大与最小值

不知道大家有没有遇到过这种要求:“返回值必须是int,如果整数数超过 32 位有符号整数范围 [−2^31, 2^31 − 1] ,需要截断这个整数,使其保持在这个范围内。例如,小于 −2^31 的整数应该被固定为 −2^31 ,大…

保护元件-详实的熔断器(保险丝)知识

目录: 一、汽车保险丝设计与选型 1、概述 2、构造及工作原理 1)构造 2)工作原理 3)保险丝熔断及分断时间 4)时间/电流特性曲线 5)环境温度修正系数 3、熔化热能值I2t★ 4、三种电流模型 1&a…

java技术:spring-secrity实现认证、授权

目录 一、依赖 二、逻辑图 三、代码设计 1、WebSecurityConfigurerAdapter的实现类 2、设计登录接口 config配置: 1)UserDetailsService实现类重写: 2)书写登录实现类(调用authenticationManager、可以与后面的…

doxygen 1.11.0 使用详解(十)——包含表格

目录 Doxygen supports two ways to put tables in the documentation. The easiest is to use the Markdown format as shown in Markdown Extensions section Tables. Although this format is easy to use and read, it is also rather limited. It supports only a simpl…

Vue学习笔记2——创建一个Vue项目

Vue项目 1、创建一个Vue项目2、Vue项目的目录结构3、模版语法4、属性绑定5、条件渲染 1、创建一个Vue项目 vue官方文档: https://cn.vuejs.org/打开命令行界面( “winR"再输入"cmd”),切换位置到指定的位置创建vue项目…

Oracle 归档模式学习笔记

版权声明:本文为CSDN博主「杨群」的原创文章,遵循CC 4.0 BY-SA版权协议,于2024年5月17日首发于CSDN,转载请附上原文出处链接及本声明。   原文链接:https://blog.csdn.net/u011046671/article/details/139012428 一…

微星打造全球首款DDR5 CAMM2内存主板:这下清爽了

微星预告了新款主板“ Z790 Project Zero Plus”,这也是 全球第一款配备DDR5 CAMM2内存的桌面主板! CAMM全称为“Compression Attached Memory Module”,已被JEDEC组织接纳为行业标准,相比传统的SO-DIMM、DIMM内存最大特点就是取消…

MM模块五(采购订单)

创建采购订单:ME21N 参考报价单创建采购订单: 哪个采购部门的哪个采购员为哪个公司代码下的采购订单 点击保存 注:采购订单的数量不能大于采购申请的数量

Milvus 高级特性

引言 Milvus 的高级特性包括分布式架构、安全性和监控与日志管理,这些特性使得 Milvus 能够更好地适应企业级应用的需求。 一、分布式架构 1.1 集群部署 在当今大数据和人工智能的时代,向量数据库以其对高维数据的强大处理能力,成为了许多…

Map遍历、反射、GC

map的遍历 用foreach遍历 HashMap<Character,Integer> map new HashMap<>();map.put(A,2);map.put(B,3);map.put(C,3);for (Map.Entry<Character,Integer> entry: map.entrySet()) {char key entry.getKey();int value entry.getValue();System.out.prin…

影视解说5.0版零基础视频课程

课程简介 现在还能做解说吗、不会写解说文案怎么解决、不会配音怎么解决、如何找到合适的素材资源、如何变现…这是很多想做解说的伙伴最关心的几大问题。比如文案&#xff0c;我们推荐一个网站&#xff0c;10分钟搞定一篇文案&#xff0c;配音可以真人配音也可以软件配音。5.…

软考-2023年11月系统架构设计师真题回忆

2023年11月系统架构设计师真题回忆 选择题 1-2.Mccabe 度量法&#xff08;错误的是V(g&#xff09;m-n1、最大范围≤10) 3.多线程任务通信方式&#xff08;共享内存消息传递&#xff09; 4.星型拓扑结构最多2跳 5.数据库(A->B,B->C),属于2NF 6.数据库去除多值依赖属…

【区块链】fisco网络运维之添加节点黑名单

基于已完成的区块链系统与管理平台搭建工作&#xff0c;开展区块链节点的黑名单工作&#xff0c;具体操作如下 以node3为例子 1查看node0节点的连接状态日志&#xff08;现有4个节点连接&#xff09; 注意&#xff1a;如果查询不到连接状态&#xff0c;修改node0的配置文件中…