为什么需要跨域
我们在前后端开发中经常会遇到跨域问题,比如网站A想要访问网站B的接口,一般情况下浏览器不允许这种操作,这时后台就需要允许跨域访问,实际上就是在返回的响应中带上一些特定的头信息,让浏览器认为是允许跨域的,这样就能正常显示了。
跨域设置没有生效
有时候明明后台设置了允许跨域,但浏览器仍然报跨域错误,这可能是因为后台设置了多个过滤器,因为过滤器有优先级,可能后台在还没走到跨域设置时就返回了,因此跨域设置需要放在最前面。
Spring Boot 3 怎么设置跨域及其优先级
@Slf4j
@Configuration
public class CrossConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 1 设置访问源地址
corsConfiguration.addAllowedOrigin("*");
// 2 设置访问源请求头
corsConfiguration.addAllowedHeader("*");
// 3 设置访问源请求方法
corsConfiguration.addAllowedMethod("*");
// 4 暴露哪些头部信息
corsConfiguration.addExposedHeader("*");
return corsConfiguration;
}
@Bean
public FilterRegistrationBean<CorsFilter> corsFilterConfig() {
log.info("set cors config");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 5 对接口配置跨域设置
source.registerCorsConfiguration("/**", buildConfig());
//有多个filter时此处设置改CorsFilter的优先执行顺序
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
}