springboot 设置CorsFilter跨域不生效的解决

网上有很多CorsFilter跨域不生效解决办法,一下链接是我试过成功的一种解决办法,

跨域配置CorsFilter不生效原因

项目中有多个Filter时,需要通过 @Order(Ordered.HIGHEST_PRECEDENCE) 注解设置过滤器的执行顺序

order的规则

1. order的值越小,优先级越高

2. order如果不标注数字,默认最低优先级,因为其默认值是int最大值

3. 该注解等同于实现Ordered接口getOrder方法,并返回数字。

如果使用如下注释掉的方法进行设置跨域,Filter的doFilter()方法中直接return出去时,前端会提示跨域

因为这个CorsConfig并没有实现Filter接口,即使加上 @Order 注解也不会生效,需要通过如下新的方式返回一个新的FilterRegistrationBean出去,并设置order

自己的代码如下:

import lombok.extern.slf4j.Slf4j; import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.Ordered; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter;

/** * @description: 处理跨域过滤器 * @author: luox **/ @Slf4j @Configuration public class CrossFilter {

private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration();

// 设置访问源地址 corsConfiguration.addAllowedOrigin("*"); // 设置访问源请求头 corsConfiguration.addAllowedHeader("*"); // 设置访问源请求方法 corsConfiguration.addAllowedMethod("*"); // 设置是否支持用户凭证 corsConfiguration.setAllowCredentials(true); return corsConfiguration; } // 不生效的代码 // @Bean // public CorsFilter corsFilter() { // UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); // source.registerCorsConfiguration("/**", buildConfig()); // return new CorsFilter(source); // }

// 生效的代码

@Bean public FilterRegistrationBean<CorsFilter> corsFilter() { log.info("跨域设置。。。。"); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); //项目中有多个filter时此处设置改CorsFilter的优先执行顺序 FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source)); bean.setOrder(Ordered.HIGHEST_PRECEDENCE); return bean; }

}

经验分享 程序员 微信小程序 职场和发展