public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.allowCredentials(true)
.allowedHeaders("*")
.maxAge(3600);
}
使用此方法配置之后再使用自定义拦截器时跨域相关配置就会失效。
原因是请求经过的先后顺序问题,当请求到来时会先进入拦截器中,而不是进入Mapping映射中,所以返回的头信息中并没有配置的跨域信息。浏览器就会报跨域异常。
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
final CorsConfiguration corsConfiguration = new CorsConfiguration();
//是否允许请求带有验证信息
corsConfiguration.setAllowCredentials(true);
// 允许访问的客户端域名
corsConfiguration.addAllowedOriginPattern("*");
// 允许服务端访问的客户端请求头
corsConfiguration.addAllowedHeader("*");
// 允许访问的方法名,GET POST等
corsConfiguration.addAllowedMethod("*");
// 最大时间
corsConfiguration.setMaxAge(3600L);
// 注册配置
urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}
前后端token方式,并不是使用的cookie,SpringBoot项目只需要设置一下禁止cookie传递,就可以了,也就是B CorsFilter 方案
使用 Sa-Token 的全局过滤器解决跨域问题(三种方式全版)
随便找一个网站,打开F12控制台,用fetch发送请求
如何生成fetch,用apifox生成cur,让ai转也行
fetch("<http://127.0.0.1:8080/user/doLogin>", {
"headers": {
"accept": "*/*",
"accept-language": "zh-CN,zh;q=0.9",
"content-type": "application/json",
"sec-ch-ua": "\\"Chromium\\";v=\\"134\\", \\"Not:A-Brand\\";v=\\"24\\", \\"Google Chrome\\";v=\\"134\\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\\"Windows\\"",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site"
},
"referrer": "<https://blog.csdn.net/Dream_Weave/article/details/106849575>",
"referrerPolicy": "unsafe-url",
"body": "{\\"username\\":\\"zhang\\"}",
"method": "POST",
"mode": "cors",
"credentials": "omit"
});