SpringMvc CORS跨域设置

Posted

tags:

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

参考技术A 基于安全的考虑, W3C 规范规定浏览器禁止访问不同域(origin)的资源,目前绝大部分浏览器遵循这一规范,从而衍生出了跨域资源共享 ( CORS )问题,相比于 IFRAME 或 JSONP , CORS 更全面并且更安全, Spring Mvc 为我们提供了一套多粒度的CORS解决方案。

关于 CORS 的介绍,主要参考文章 《Cross-Origin Resource Sharing (CORS)》

CORS 的工作原理是添加新的 HTTP headers 来让服务器描述哪些源的请求可以访问该资源,对于可能对服务器造成不好影响的请求,规范规定浏览器需要先发送“预检”请求(也就是 OPTION 请求),在预检请求通过后再发送实际的请求,服务器还可以通知客户端是否应该随请求发送“凭据”(例如 Cookie 和 HTTP 身份验证),更详细的介绍可以参考上面的文章,本文主要讨论 Spring Mvc 对 CORS 的支持。

需要注意的是:

不需要发送”预检“请求

可以看见 @CrossOrigin 注解可以标注在类或者方法上,其中几个常量如 DEFAULT_ORIGINS 已经在Spring 5.0弃用,取而代之的是 CorsConfiguration#applyPermitDefaultValues 方法。

标注在类上,该类的所有方法均会生效

同时也可以类和方法结合使用

@CrossOrigin 注解比较适用于较细粒度的跨域控制,对于全局的跨域控制, Spring Mvc 提供了 Global Configuration 配置。

Spring Mvc 对于全局的 CORS 比较简单,分为两个方案

创建 WebConfig 类实现 WebMvcConfigurer 接口,通过 CorsRegistry 设置跨域信息

通过 CorsConfiguration 设置跨域信息,并将 CorsConfiguration 通过 CorsFilter 构造函数传递进去

Spring Mvc 对于 CORS 可以说是非常方便,本文主要是想让各位开发者对跨域有个整体的了解,各个参数代表的含义,而不是在所有项目中都一概而论的设置为“*”,要在自身项目的实际需求以及安全性上多做思考,防止生产事故。

以上是关于SpringMvc CORS跨域设置的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC学习(11)—跨域的介绍以及使用CORS解决跨域问题

springmvc拦截器使CORS anaotion和拦截器无法处理跨域

spring MVC cors跨域实现源码解析 CorsConfiguration UrlBasedCorsConfigurationSource

SpringBoot CORS 跨域 @CrossOrigin

403 Invalid CORS request 跨域问题

Nginx 设置cors跨域