随笔18. @CrossOrigin 注解 处理 Spring 处理 跨域资源共享(CORS,Cross-Origin Resource Sharing)

185 阅读2分钟

CrossOrigin 是 Spring 框架中的一个注解,主要用于处理 跨域资源共享(CORS,Cross-Origin Resource Sharing)问题。它允许服务器明确允许哪些域能够访问其资源。

什么是跨域(CORS)?

跨域是指从一个域名(比如 http://example.com)访问另一个域名(比如 http://api.example.com)的资源,浏览器默认是禁止这种行为的。为了实现跨域访问,浏览器和服务器之间会进行 CORS 机制的校验和沟通。

@CrossOrigin 的作用

@CrossOrigin 注解用于解决跨域问题,它告诉 Spring 框架允许来自指定域名的请求。可以在类或方法级别上使用,应用在控制器上时,它会使指定的域对某个资源(API)开放访问权限。

使用方法

  1. 全局跨域(对整个控制器的所有方法开放跨域):

    @RestController
    @RequestMapping("/api")
    @CrossOrigin(origins = "http://example.com")
    public class MyController {
        
        @GetMapping("/data")
        public ResponseEntity<String> getData() {
            return ResponseEntity.ok("跨域请求成功!");
        }
    }
    

    上述代码表示,来自 http://example.com 域的请求可以访问 MyController 中的所有方法。

  2. 针对单个方法的跨域配置

    @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 请求方法(如 GETPOST 等)。

    @CrossOrigin(methods = {RequestMethod.GET, RequestMethod.POST})
    
  • maxAge:配置预检请求的缓存时间,以秒为单位。

    @CrossOrigin(maxAge = 3600)  // 允许缓存跨域预检请求1小时
    

总结

@CrossOrigin 是 Spring 用于解决跨域问题的一个简单而强大的注解。它允许开发者对跨域访问进行精确控制,避免跨域请求引起的安全性问题。在开发前后端分离的项目时,使用 CORS 是非常常见的。