CrossOrigin 是 Spring 框架中的一个注解,主要用于处理 跨域资源共享(CORS,Cross-Origin Resource Sharing)问题。它允许服务器明确允许哪些域能够访问其资源。
什么是跨域(CORS)?
跨域是指从一个域名(比如 http://example.com)访问另一个域名(比如 http://api.example.com)的资源,浏览器默认是禁止这种行为的。为了实现跨域访问,浏览器和服务器之间会进行 CORS 机制的校验和沟通。
@CrossOrigin 的作用
@CrossOrigin 注解用于解决跨域问题,它告诉 Spring 框架允许来自指定域名的请求。可以在类或方法级别上使用,应用在控制器上时,它会使指定的域对某个资源(API)开放访问权限。
使用方法
-
全局跨域(对整个控制器的所有方法开放跨域):
@RestController @RequestMapping("/api") @CrossOrigin(origins = "http://example.com") public class MyController { @GetMapping("/data") public ResponseEntity<String> getData() { return ResponseEntity.ok("跨域请求成功!"); } }上述代码表示,来自
http://example.com域的请求可以访问MyController中的所有方法。 -
针对单个方法的跨域配置:
@RestController @RequestMapping("/api") public class MyController { @GetMapping("/data") @CrossOrigin(origins = "http://example.com") public ResponseEntity<String> getData() { return ResponseEntity.ok("跨域请求成功!"); } }这个配置表示,只有
getData()方法允许来自http://example.com域的请求。
@CrossOrigin 常用属性
-
origins:指定允许访问的域名,可以设置多个域名。
@CrossOrigin(origins = {"http://example.com", "http://another-domain.com"}) -
allowedHeaders:指定允许的请求头。
@CrossOrigin(allowedHeaders = "Authorization") -
methods:指定允许的 HTTP 请求方法(如
GET、POST等)。@CrossOrigin(methods = {RequestMethod.GET, RequestMethod.POST}) -
maxAge:配置预检请求的缓存时间,以秒为单位。
@CrossOrigin(maxAge = 3600) // 允许缓存跨域预检请求1小时
总结
@CrossOrigin 是 Spring 用于解决跨域问题的一个简单而强大的注解。它允许开发者对跨域访问进行精确控制,避免跨域请求引起的安全性问题。在开发前后端分离的项目时,使用 CORS 是非常常见的。