Spring Boot3怎么设置允许跨域及优先级

119 阅读1分钟

为什么需要跨域

我们在前后端开发中经常会遇到跨域问题,比如网站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;
    }
}