错误代码
Access to XMLHttpRequest at ‘http://localhost:9999/user/login’ from origin ‘http://localhost:8888’ 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.
问题说明
跨域问题,源自浏览器的一个同源策略。它是浏览器最核心也是最基本的安全功能,所有支持 JavaScript 的浏览器都会使用这个策略。在同源策略中,要求 域名、协议、端口 3部分都要相同。从错误代码可以看出是CORS所致
解决办法
@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
// 1.添加CORS配置信息
CorsConfiguration config = new CorsConfiguration();
// 1) 允许的域,不要写*,否则cookie就无法使用了,这里填写请求的前端服务器
config.addAllowedOrigin("http://localhost:8888");
// 2) 是否发送Cookie信息
config.setAllowCredentials(true);
// 3) 允许的请求方式
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("HEAD");
config.addAllowedMethod("GET");
config.addAllowedMethod("PUT");
config.addAllowedMethod("POST");
config.addAllowedMethod("DELETE");
config.addAllowedMethod("PATCH");
// 4)允许的头信息
config.addAllowedHeader("*");
// 2.添加映射路径,我们拦截一切请求
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
// 3.返回新的CorsFilter.
return new CorsFilter(configSource);
}
}