CORS:

通常情况下浏览器禁止AJAX从外部获取资源,因此就衍生了CORS这一标准体系,来实现跨域请求。

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制.

跨域请求在java spring MVC中的实现:

Spring MVC HandlerMapping 接口对CORS提供了一个内部支持,在成功的映射到一个处理器的请求之后,HanderMapping接口检查CORS的请求配置文件,然后采取下一步行动,预检(Preflight)请求能够被直接的处理,而简单和直接的CORS请求将会被拦截和经过验证,同时还需要CORS请求头的进一步设置。因此,为了确保能够实现跨域请求,在请求头中会加入Origin这一字段,来实现跨域请求,同时对于不同的主机而言请求头是不一样的。你必须有一些明确的声明的配置文件,如果相应的CORS的配置文件没有找到的话,预检请求将会被拒绝,同时请求头也不会加到相应的响应当中。每一个HandlerMapping能够被独立的配置带着基于CorsConfiguration映射的url模式。通常情况下应用使用MVC Java的配置文件或者XML命名空间来声明这样的映射。通常情况下能够使每一个单一的map映射通过所有的HandlerMapping实例。

@CrossOrigin:

这个注解能够使跨域请求实现在注解控制器里面:主要的实现方法如下:

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

默认情况下上述注解还实现了以下功能:

1 :所有的origin请求字段。

2:所有的请求头。

3: 所有的被映射的HTTP方法。

同时@Crossorigin继承所有的类和方法,相关的示例如下:

@CrossOrigin(origins = "https://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) {
// ...
}
}

全局配置:

默认情况下,全局配置需要能够满足以下几点:

1 :所有的:Ogrigin字段

2:所有的请求头。

3 :GET HEAD 和POST 方法。

为了能够使CORS(跨域请求)在MVC 的Java 的配置文件里面配置,你需要使用CorsRegistry回调接口,具体的实现例子如下:

@Configuration
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer { @Override
public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/api/**")
.allowedOrigins("https://domain2.com")
.allowedMethods("PUT", "DELETE")
.allowedHeaders("header1", "header2", "header3")
.exposedHeaders("header1", "header2")
.allowCredentials(true).maxAge(3600); // Add more mappings...
}
}

XML配置:

为了能够使CORS(跨域请求)实现在XML的命名空间需要使用<mvc:cors>组件元素,具体的实现例子如下:

<mvc:cors>

    <mvc:mapping path="/api/**"
allowed-origins="https://domain1.com, https://domain2.com"
allowed-methods="GET, PUT"
allowed-headers="header1, header2, header3"
exposed-headers="header1, header2" allow-credentials="true"
max-age="123" /> <mvc:mapping path="/resources/**"
allowed-origins="https://domain1.com" /> </mvc:cors>

CORS Fliter:

你可以使跨域请求内置在CorsFliter类当中(即跨域过滤器)。实现配置这个过滤器,CorsConfigurationSource及其构造函数。相关的示例如下:

CorsConfiguration config = new CorsConfiguration();

// Possibly...
// config.applyPermitDefaultValues() config.setAllowCredentials(true);
config.addAllowedOrigin("https://domain1.com");
config.addAllowedHeader("*");
config.addAllowedMethod("*"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config); CorsFilter filter = new CorsFilter(source);

CORS跨域请求规则以及在Spring中的实现的更多相关文章

  1. Spring Boot Web应用开发 CORS 跨域请求支持:

    Spring Boot Web应用开发 CORS 跨域请求支持: 一.Web开发经常会遇到跨域问题,解决方案有:jsonp,iframe,CORS等等CORS与JSONP相比 1. JSONP只能实现 ...

  2. 4 伪ajax:jsonp、cors 跨域请求

    一.同源策略 https://www.cnblogs.com/yuanchenqi/articles/7638956.html 同源策略(Same origin policy)是一种约定,它是浏览器最 ...

  3. CORS跨域请求总结

    CORS跨域请求分为简单请求和复杂请求. 1. 简单请求: 满足一下两个条件的请求. (1) 请求方法是以下三种方法之一: HEAD GET POST (2)HTTP的头信息不超出以下几种字段: Ac ...

  4. spring boot跨域请求访问配置以及spring security中配置失效的原理解析

    一.同源策略 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[orig ...

  5. SpringBoot配置Cors跨域请求

    一.同源策略简介 同源策略[same origin policy]是浏览器的一个安全功能,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源. 同源策略是浏览器安全的基石. 什么是源 源[or ...

  6. CORS——跨域请求那些事儿

    在日常的项目开发时会不可避免的需要进行跨域操作,而在实际进行跨域请求时,经常会遇到类似 No 'Access-Control-Allow-Origin' header is present on th ...

  7. Java实现CORS跨域请求

    问题 使用前后端分离模式开发项目时,往往会遇到这样一个问题 -- 无法跨域获取服务端数据 这是由于浏览器的同源策略导致的,目的是为了安全.在前后端分离开发模式备受青睐的今天,前端和后台项目往往会在不同 ...

  8. CORS跨域请求

    一.问题: 服务器端代码 from flask import Flask from flask import make_response from flask import jsonify app = ...

  9. CORS跨域请求[简单请求与复杂请求]

    CORS即Cross Origin Resource Sharing(跨来源资源共享),通俗说就是我们所熟知的跨域请求.众所周知,在以前,跨域可以采用代理.JSONP等方式,而在Modern浏览器面前 ...

随机推荐

  1. 关于修改.net core webapi中null默认返回的状态码。

    在asp .net core webapi中,http请求的响应数据如果是null的话,我们知道状态码会返回204,即NoContent,为什么会出现这种情况呢?   因为在返回响应数据的时候,nul ...

  2. Docker部署Jenkins 2.285版持续部署集成实践(2)

    前言:上一篇文章中,写到了jenkins搭建,下面记录使用jenkins构建项目实践 1. 以构建.netcore项目为例,如果要构建.netcore项目,需要安装dotnet-sdk包 进入jenk ...

  3. 【动画消消乐|CSS】086.炫酷水波浪Loading过渡动画

    前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出-   自我介绍 ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计 ...

  4. 如何用Git上传项目到GitHub

    1.登录gitHub,进入主页面,点击"+"号,建立新仓库. 2. 输入自己的仓库名,和简单的描述,根据自己设置为公开的或私有的. 我输入的是仓库名为ESMS. 勾选此选项,rea ...

  5. JavaSE-方法

    何谓方法 比如之前用到的 System.out.println(); System为一个类:out为这个类的一个输出对象:println()为这个对象的方法 调用System类中out输出对象的pri ...

  6. noip模拟10

    被打回原形了emmmmm 贴张图吧,展示一下根本不行的水平 考试经过 上来浏览一遍T1到T3,读懂题之后发现都不是很可做 T1上了想到了前缀和,往矩阵快速幂想了一下觉得不可做,半小时之后还是只会\(n ...

  7. Specification使用in

    //是否包含下级授权点 1 包含 2 不包含 List<AuthorizationPoint> authList = null; List<Long> pointIdList ...

  8. 是的你没看错,HTTP3来了

    目录 简介 HTTP成长介绍 不同HTTP协议解决的问题 HTTP3和QUIC TLS1.3 解决HoL阻塞 连接的迁移 总结 简介 很多小伙伴可能还沉浸在HTTP1.1的世界无法自拔,但是时代的洪流 ...

  9. 【spring 注解驱动开发】spring自动装配

    尚学堂spring 注解驱动开发学习笔记之 - 自动装配 自动装配 1.自动装配-@Autowired&@Qualifier&@Primary 2.自动装配-@Resource& ...

  10. 【linux】tail 命令详解

    转自:https://www.cnblogs.com/fps2tao/p/7698224.html Linux命令:显示文件结尾 Head/Tail head 与 tail 就像它的名字一样的浅显易懂 ...