跨域配置完成以后,又进行拦截器的配置,发现跨域配置失效,以下是原配置
@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); } }
标签:拦截器,SpringBoot,corsConfiguration,配置,跨域,public,自定义 From: https://www.cnblogs.com/wongzzh/p/17168759.html