目录
跨域
定义
跨域是指在域名,端口,协议,三种任意一种不同,都会算作不同域,当想要访问的时候不同域,或者不同域之间请求资源,即是跨域。
为什么出现跨域
现在前后端分离的系统越来越多,前端和后端的端口不一致,前端想要访问测试环境中的后端服务等等,就会触发跨域。
流程
跨域是前端可以发送请求,后端也可以返回结果,但是浏览器拦截了返回结果,前端会显示CORS错误。
前端发送请求->服务端解析请求->服务端返回结果->浏览器拦截
解决方法
方法一
我是用的已解决办法是在Controller层中加入注解@CrossOrigin
@Controller
@CrossOrigin
public class AlarmRecordController {
}
注解CrossOrigin采用的是局部解锁跨域。也就是说在controller类或者是controller的方法上加入均可以。
未解决办法
以下几种方法,本人均使用,但是未成功。
全局配置
过滤器
/**过滤器
*/
@Configuration
public class GlobalCorsConfig {
@Bean
public FilterRegistrationBean<CorsFilter> corsFilter() {
FilterRegistrationBean<CorsFilter> corsFilterFilterRegistrationBean = new FilterRegistrationBean<>();
//添加CORS配置信息
CorsConfiguration corsConfiguration = new CorsConfiguration();
//允许的域,不要写*,否则cookie就无法使用了
corsConfiguration.addAllowedOrigin("*");
//允许的头信息
corsConfiguration.addAllowedHeader("*");
//允许的请求方式
corsConfiguration.setAllowedMethods(Arrays.asList("POST", "PUT", "GET", "OPTIONS", "DELETE"));
//是否发送cookie信息
corsConfiguration.setAllowCredentials(true);
//预检请求的有效期,单位为秒
corsConfiguration.setMaxAge(3600L);
//添加映射路径,标识待拦截的请求
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", corsConfiguration);
corsFilterFilterRegistrationBean.setFilter(new CorsFilter(source));
corsFilterFilterRegistrationBean.setOrder(-1);
return corsFilterFilterRegistrationBean;
}
}
拦截器
@Configuration
public class MyConfiguration implements WebMvcConfigurer {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET","POST","OPTIONS","DELETE", "PATCH",)
.maxAge(3600*24);
}
}
使用环境
Springboot 2.7.0版本,以上一种方法,和本人版本不一致的可以尝试。
标签:请求,corsConfiguration,解锁,跨域,new,public,corsFilterFilterRegistrationBean,Springboo From: https://www.cnblogs.com/LuoXia-youyu/p/17011288.html