其他分享
首页 > 其他分享> > 注解@CrossOrigin的作用

注解@CrossOrigin的作用

作者:互联网

原文链接:https://www.cnblogs.com/mmzs/p/9167743.html#_label1_0

注解@CrossOrigin

出于安全原因,浏览器禁止Ajax调用驻留在当前原点之外的资源。例如,当你在一个标签中检查你的银行账户时,你可以在另一个选项卡上拥有EVILL网站。来自EVILL的脚本不能够对你的银行API做出Ajax请求(从你的帐户中取出钱!)使用您的凭据。

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

一、跨域(CORS)支持:

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

二、使用方法:

1、controller配置CORS

1.1、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:准备响应前的缓存持续的最大时间(以秒为单位)。

1.2、为整个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配置。

1.3、同时使用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) {
        // ...
    }
}

标签:...,CrossOrigin,id,CORS,注解,public,作用,PathVariable
来源: https://blog.csdn.net/qq_39205129/article/details/100163502