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




相关推荐
程序员cxuan25 分钟前
Codex 会把磁盘给烧了?完整复盘来了!
人工智能·后端·程序员
ClouGence1 小时前
Oracle 数据同步为什么会出现数据不一致?长事务是常被忽略的原因
数据库·后端·oracle
快乐肚皮1 小时前
深入理解Loop Engineering
前端·后端
plainGeekDev2 小时前
单例模式 → object 声明
android·java·kotlin
小兔崽子去哪了2 小时前
Vue3 + Pinia 集成 IGV.js 实现 BAM 文件在线浏览
javascript·vue.js·后端
孟陬2 小时前
Claude Code 巧思 `Ctrl+S` 暂存键
前端·后端
雪隐2 小时前
个人电脑玩AI-06让5060 Ti给你打工——不光能画画,Qwen3-TTS还能学人说话,连我老板都信了!
人工智能·后端·python
Oneslide2 小时前
openEuler 17.1GB Everything ISO 离线本地 DNF 源搭建教程
后端
蝎子莱莱爱打怪3 小时前
那不是我的黑历史,那是我的来时路啊!😭😭
后端·程序员
用户298698530143 小时前
Java 实现 Word 文档文本与图片提取的方法
java·后端