【spring】@CrossOrigin注解学习

@CrossOrigin介绍

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

@CrossOrigin源码

java 复制代码
@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 等。

    java 复制代码
    @CrossOrigin(origins = "*", methods = {RequestMethod.GET, RequestMethod.POST})
  2. value与 origins 属性相同,用于指定允许的源列表。在 @CrossOrigin 注解中,valueorigins 属性是等价的,可以互换使用。

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

    java 复制代码
    @CrossOrigin(origins = "*", methods = {RequestMethod.GET, RequestMethod.POST})
  4. allowedHeaders: 指定在预请求(pre-flight request,即 OPTIONS 请求)中允许的自定义头信息。如果不指定,默认只允许简单的请求头。

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

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

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

    java 复制代码
    @CrossOrigin(origins = "*", maxAge = 3600)

@CrossOrigin注解使用场景

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

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

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

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

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

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

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

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




相关推荐
hygge9993 分钟前
类加载机制、生命周期、类加载器层次、JVM的类加载方式
java·开发语言·jvm·经验分享·面试
d111111111d5 分钟前
STM32外设学习-串口数据包笔记-(数据包的了解)
笔记·stm32·单片机·嵌入式硬件·学习
韩立学长9 分钟前
基于Springboot的汽车推荐系统设计与实现7f7h74np(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·汽车
Victor3569 分钟前
Redis(123)Redis在大数据场景下的应用有哪些?
后端
程序员爱钓鱼10 分钟前
Python 编程实战 · 实用工具与库 — Flask 基础入门
后端·python·面试
一 乐13 分钟前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·javascript·数据库·vue.js·后端
q***656914 分钟前
Spring Boot集成Kafka:最佳实践与详细指南
spring boot·kafka·linq
Victor35616 分钟前
Redis(122)Redis的版本更新如何进行?
后端
程序员爱钓鱼16 分钟前
Python编程实战 - Python实用工具与库 - 文件批量处理脚本
后端·python·面试
大飞哥~BigFei2 小时前
RabbitMq消费延迟衰减重试实现思路
java·分布式·rabbitmq