SpringBoot自定义拦截器和跨域配置冲突的问题

跨域配置完成以后,又进行拦截器的配置,发现跨域配置失效,以下是原配置

@Configuration
public class CORSConfig implements WebMvcConfigurer {
    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/**")
                        .allowedOrigins("*") // 允许所有请求来源
                        .allowedMethods("*") // 允许的请求类型
                        .allowCredentials(true)
                        .allowedHeaders("*");
            }
        };
    }
}

经过了解和排查发现,当有请求发送到后台时,先被自定义拦截器拦截,如果拦截器验证没有问题,才会开始执行跨域配置。

因此解决办法是让跨域配置在自定义拦截器之前执行。而Filter的执行顺序大于自定义拦截器,因此可以在Filter中实现跨域的配置。

修改之后的跨域配置:修改为过滤器配置跨域

@Configuration
public class CorsConfig {

    // 当前跨域请求最大有效时长。这里默认1天
    private static final long MAX_AGE = 24 * 60 * 60;

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
        corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
        corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
//        corsConfiguration.setMaxAge(MAX_AGE);
        source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
        return new CorsFilter(source);
    }
}

 

posted @ 2023-03-01 16:29  唏嘘-  阅读(368)  评论(0编辑  收藏  举报