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




相关推荐
LateBloomer7771 分钟前
FreeRTOS——信号量
笔记·stm32·学习·freertos
legend_jz5 分钟前
【Linux】线程控制
linux·服务器·开发语言·c++·笔记·学习·学习方法
Komorebi.py6 分钟前
【Linux】-学习笔记04
linux·笔记·学习
drebander17 分钟前
使用 Java Stream 优雅实现List 转化为Map<key,Map<key,value>>
java·python·list
乌啼霜满天24921 分钟前
Spring 与 Spring MVC 与 Spring Boot三者之间的区别与联系
java·spring boot·spring·mvc
tangliang_cn26 分钟前
java入门 自定义springboot starter
java·开发语言·spring boot
程序猿阿伟27 分钟前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
Grey_fantasy37 分钟前
高级编程之结构化代码
java·spring boot·spring cloud
新知图书38 分钟前
Rust编程与项目实战-模块std::thread(之一)
开发语言·后端·rust
弗锐土豆43 分钟前
工业生产安全-安全帽第二篇-用java语言看看opencv实现的目标检测使用过程
java·opencv·安全·检测·面部