网上有很多CorsFilter跨域不生效解决办法,一下链接是我试过成功的一种解决办法,
springboot 设置CorsFilter跨域不生效的解决_Java_软件编程 - 编程客栈
跨域配置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;
}
}