SpringBoot跨域(CORS)支持:注解@CrossOrigin

Posted 嘻嘻的妙妙屋

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot跨域(CORS)支持:注解@CrossOrigin相关的知识,希望对你有一定的参考价值。

跨域(CORS)支持

出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。

跨源资源共享(CORS)是由大多数浏览器实现的W3C规范,允许您灵活地指定什么样的跨域请求被授权,而不是使用一些不太安全和不太强大的策略,如IFRAME或JSONP。

Spring Framework 4.2 GA为CORS提供了第一类支持,使您比通常的基于过滤器的解决方案更容易和更强大地配置它。所以springMVC的版本要在4.2或以上版本才支持@CrossOrigin

使用方法

controller 配置 CORS

controller方法的CORS配置

你可以向@RequestMapping注解处理程序方法添加一个@CrossOrigin注解,以便启用CORS(默认情况下,@CrossOrigin允许在@RequestMapping注解中指定的所有源和HTTP方法):

@RestController
@RequestMapping("/account")
public class AccountController 
 
    @CrossOrigin
    @GetMapping("/id")
    public Account retrieve(@PathVariable Long id) 
        // ...
    
 
    @DeleteMapping("/id")
    public void remove(@PathVariable Long id) 
        // ...
    

其中@CrossOrigin中的2个参数:

  • origins:允许可访问的域列表
  • maxAge:准备响应前的缓存持续的最大时间(以秒为单位)。

为整个controller启用@CrossOrigin

@CrossOrigin(origins = "http://domain2.com", maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController 
 
    @GetMapping("/id")
    public Account retrieve(@PathVariable Long id) 
        // ...
    
 
    @DeleteMapping("/id")
    public void remove(@PathVariable Long id) 
        // ...
    

在这个例子中,对于retrieve()remove()处理方法都启用了跨域支持,还可以看到如何使用@CrossOrigin属性定制CORS配置。

同时使用controller和方法级别的CORS配置

Spring将合并两个注释属性以创建合并的CORS配置

@CrossOrigin(maxAge = 3600)
@RestController
@RequestMapping("/account")
public class AccountController 
 
    @CrossOrigin(origins = "http://domain2.com")
    @GetMapping("/id")
    public Account retrieve(@PathVariable Long id) 
        // ...
    
 
    @DeleteMapping("/id")
    public void remove(@PathVariable Long id) 
        // ...
    

以上是关于SpringBoot跨域(CORS)支持:注解@CrossOrigin的主要内容,如果未能解决你的问题,请参考以下文章

SpringBoot2.0 CORS跨域

SpringBoot CORS 跨域 @CrossOrigin

SpringBoot学习-SpringBoot添加支持CORS跨域访问

springboot webapi 支持跨域 CORS

springboot 跨域

Cors跨域请求