-
目录
简述:
因为浏览器的同源策略,导致不同源的地址无法进行相互访问,出现跨域问题。比如:在百度页面,使用fetch请求,百度和淘宝的链接,会出现淘宝链接出现cors错误。
-
概念剖析:
- 同源策略:是一种约定,它是浏览器最核心也最基本的安全功能。一个url包含以下几个部分:协议、域名、端口,只有这几个完全相同则为同源,否则为非同源。(http默认80端口,https一般默认443端口,url中可以忽略不写)
-
CORS:跨域资源共享CORS(Cross-Origin Resource Sharing)简称跨域访问,是HTML5提供的标准跨域解决方案,允许Web应用服务器进行跨域访问控制,确保跨域数据传输的安全性。简而言之,就是解决跨域问题,使得域名A的请求能够请求域名B的资源。(前端web访问你本地后端接口)
-
解决方案(java后端)
- 使用注解 `@CrossOrigin`,标注在controller类的方法上或者controller类上。此方法针对多接口不适用,每个接口都得添加,代码繁琐。
2.使用crosFIlter过滤器
package com.zbkj.admin.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/** 跨域配置
*/
@Configuration
public class CorsConfig{
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*"); //允许任何域名
corsConfiguration.addAllowedHeader("*"); //允许任何头
corsConfiguration.addAllowedMethod("*"); //允许任何方法
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig()); //注册
return new CorsFilter(source);
}
}
3.实现WebMvcConfigurer
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") //设置允许跨域访问的路径
.allowedOrigins("*") //设置允许跨域访问的源
.allowedMethods("*") //允许跨域请求的方法
.maxAge(168000) //预检间隔时间
.allowedHeaders("*") //允许头部设置
.allowCredentials(true); //是否发送 cookie
}
}