Spring WebFlux 的 CORS 跨源资源共享 @CrossOrigin 使用教程

JAVA herman 66浏览
公告:“业余草”微信公众号提供免费CSDN下载服务(只下Java资源),关注业余草微信公众号,添加作者微信:codedq,发送下载链接帮助你免费下载!
本博客日IP超过2000,PV 3000 左右,急需赞助商。
极客时间所有课程通过我的二维码购买后返现24元微信红包,请加博主新的微信号:codedq,之前的微信号好友位已满,备注:返现
饿了么大量招人,我内推!Java 方向!薪资不设上限,工作年龄不限!工作地点限魔都,可电话面试!简历,发我微信:codedq
所有面试题(java、前端、数据库、springboot等)一网打尽,请关注文末小程序
视频教程免费领

这两天有不少网友加我微信好友,咨询 WebFlux 相关的教程。

而我之前也写过一系列相关的教程,但是那些教程至今已经有一段时间了。很多网友已经开始用上 WebFlux 了,为了减少大家的咨询,我再继续更新一些相关的教程!

今天,我们来说一说 WebFlux 中的跨域问题。

出于安全原因,浏览器禁止 AJAX 调用当前来源以外的资源。而我们往往有这样的场景,于是 CORS 诞生了。

跨域资源共享(CORS)是 由大多数浏览器实现的 W3C 规范,可让您指定授权哪种类型的跨域请求,而不是使用基于 IFRAME 或 JSONP 的安全性较低且功能较弱的变通办法。

Spring WebFlux HandlerMapping 实现提供对 CORS 的内置支持。并且提供了一个 @CrossOrigin 注解,这个注解可以作用在类上,也可以作用在方法上。

@RestController
@RequestMapping("/xttblog")
public class XttblogController {
    @CrossOrigin
    @GetMapping("/{id}")
    public Mono<Account> retrieve(@PathVariable Long id) {
        // ...
    }
    @DeleteMapping("/{id}")
    public Mono<Void> remove(@PathVariable Long id) {
        // ...
    }
}

默认情况下,@CrossOrigin 允许所有请求源,允许所有 headers,允许所有控制器方法能够映射到的所有 HTTP 方法。

@CrossOrigin 注解中有 7 个参数,作用分别如下:

  • origins:允许可访问的域列表
  • maxAge:准备响应前的缓存持续的最大时间(以秒为单位),默认30分钟
  • allowedHeaders:允许请求头重的header,默认都支持
  • exposedHeaders:响应头中允许访问的header,默认为空
  • methods:请求支持的方法,例如”{RequestMethod.GET, RequestMethod.POST}”}。默认支持RequestMapping中设置的方法
  • allowCredentials:是否允许cookie随请求发送,使用时必须指定具体的域
  • value:作用和origins一样

@CrossOrigin 除了可以作用在类上外,还可以作用在方法上。

@CrossOrigin(maxAge = 3600) 
@RestController
@RequestMapping("/xttblog")
public class XttblogController {
    @CrossOrigin("https://domain2.com") 
    @GetMapping("/{id}")
    public Mono<Account> retrieve(@PathVariable Long id) {
        // ...
    }
    @DeleteMapping("/{id}")
    public Mono<Void> remove(@PathVariable Long id) {
        // ...
    }
}

从上面可以看出,@CrossOrigin 注解的作用在 WebFlux 中和在 SpringMVC 中是一样的。

所以,认真的看官方文档,你会发现 Spring 家族中的很多东西用法都一样,比如我们后面要讲的 CorsConfiguration 全局配置功能!

参考资料

业余草公众号

最后,欢迎关注我的个人微信公众号:业余草(yyucao)!可加作者微信号1:xmtxtt(5000人已满),微信号2:xttblog(5000人已满),微信号3:codedq(超3800)。备注:“1”,添加博主微信拉你进微信群。备注错误不会同意好友申请。再次感谢您的关注!后续有精彩内容会第一时间发给您!原创文章投稿请发送至532009913@qq.com邮箱。商务合作也可添加作者微信进行联系!

本文原文出处:业余草: » Spring WebFlux 的 CORS 跨源资源共享 @CrossOrigin 使用教程