@CrossOrigin
是 Spring Framework 提供的一个注解,用于处理跨源资源共享(CORS)。它允许指定哪些源可以访问被注解的控制器或方法,主要用于解决浏览器的同源策略限制。
CORS 简介
CORS(Cross-Origin Resource Sharing)是一种机制,允许在一个域中运行的 Web 应用程序请求另一个域的资源。由于安全原因,浏览器默认只允许同源请求,即请求的源(协议、域名和端口都相同)必须与资源的源相同。使用 @CrossOrigin
注解可以控制哪些来源能够访问你的 API。
@CrossOrigin
的作用
- 允许跨域请求:通过设置允许的源,可以使得来自不同域的 Web 应用能够访问你的 API。
- 细粒度控制:可以通过配置 HTTP 方法、请求头等来细粒度控制跨域访问。
- 简化 CORS 配置:在 Spring Boot 中,使用
@CrossOrigin
注解非常简单,避免了手动配置 CORS 过滤器的复杂性。
如何使用 @CrossOrigin
1. 基本用法
可以在 Controller 类或方法上直接使用 @CrossOrigin
注解:
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
@CrossOrigin(origins = "http://example.com") // 允许来自 example.com 的请求
public class MyController {@GetMapping("/api/data")public String getData() {return "Hello from Spring Boot!";}
}
2. 允许多个源
如果需要允许多个源,可以使用逗号分隔:
@CrossOrigin(origins = {"http://example.com", "http://another-example.com"})
3. 允许所有源
如果希望允许来自任何源的请求,可以将 origins
设置为 "*"
:
@CrossOrigin(origins = "*")
4. 配置其他 CORS 参数
可以通过注解的其他属性来配置更多的 CORS 设置,例如:
methods
:指定允许的 HTTP 方法,如 GET、POST 等。allowedHeaders
:指定允许的请求头。exposedHeaders
:指定允许浏览器访问的响应头。allowCredentials
:是否允许发送 Cookie,默认为 false。maxAge
:指定预检请求的有效期(单位为秒)。
示例:
@CrossOrigin(origins = "http://example.com",methods = {RequestMethod.GET, RequestMethod.POST},allowedHeaders = {"Authorization", "Content-Type"},allowCredentials = "true",maxAge = 3600
)
5. 全局配置 CORS
如果希望为整个应用程序配置 CORS,可以在 Spring Boot 的配置类中使用 WebMvcConfigurer
:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 允许所有路径.allowedOrigins("http://example.com") // 允许来自 example.com 的请求.allowedMethods("GET", "POST") // 允许 GET 和 POST 方法.allowedHeaders("*") // 允许所有请求头.allowCredentials(true); // 允许发送 Cookie}
}
总结
@CrossOrigin
注解在 Spring Boot 中用于处理 CORS,允许跨域请求。- 可以在控制器类或方法上使用,灵活配置允许的源、HTTP 方法和请求头。
- 可用于简化 CORS 配置,避免复杂的过滤器设置。
- 也可以通过实现
WebMvcConfigurer
全局配置 CORS。
通过使用 @CrossOrigin
,你可以轻松地管理跨域请求,确保你的 API 可以被需要的前端应用安全访问。