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




相关推荐
melck3 分钟前
liunx日志查询常用命令总结
java·服务器·网络
dleei3 分钟前
MySql安装及SQL语句
数据库·后端·mysql
守护者1708 分钟前
JAVA学习-练习试用Java实现“实现一个Hadoop程序,使用Hive进行复杂查询和数据筛查”
java·学习
程序员 小柴14 分钟前
docker的与使用
java·docker·eureka
CryptoPP18 分钟前
springboot 对接马来西亚数据源API等多个国家的数据源
spring boot·后端·python·金融·区块链
ゞ 正在缓冲99%…19 分钟前
leetcode76.最小覆盖子串
java·算法·leetcode·字符串·双指针·滑动窗口
清风絮柳23 分钟前
52.个人健康管理系统小程序(基于springboot&vue)
vue.js·spring boot·毕业设计·前后端分离·健康管理系统·个人健康管理系统·个人健康管理小程序
Source.Liu32 分钟前
【学Rust写CAD】27 双线性插值函数(bilinear_interpolation.rs)
后端·rust·cad
Seven9733 分钟前
【Guava】并发编程ListenableFuture&Service
java
WannaRunning33 分钟前
浅谈Tomcat数据源连接池
java·oracle·tomcat