出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议(protocol),主机(host)和端口号(port),三者中的任何一个不同都将产生跨域问题。
问题特征—前端向后台发送请求发现报错:
Access to XMLHttpRequest at ‘http://localhost:8082/doLogin’ from origin ‘http://localhost:8080’ has been blocked by CORS policy: Response to preflight request doesn’t pass access control check: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
一般都是异步请求会有这个问题,比如:Ajax,XMLHttpRequest等…
解决方法:
1在WebMvcConfig添加addCorsMappings方法
@Override
public void addCorsMappings(CorsRegistry registry) {
//允许跨域访问资源定义
registry.addMapping("/**")
//(只允许本地的指定端口访问)允许所有
.allowedOrigins("http://localhost:8080")
// 允许发送凭证: 前端如果配置改属性为true之后,则必须同步配置
.allowCredentials(true)
// 允许所有方法
.allowedMethods("*")
.allowedHeaders("*");
}
直接将允许访问的端口,资源地址等等进行设置(vue前端项目的端口为8080),简单高效。
2直接采用SpringBoot的注解@CrossOrigin
Controller层在需要跨域的类或者方法上加上该注解即可,比较复杂,一般采用第一种。



