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

网上有很多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() {
        log.info("跨域设置。。。。");
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        //项目中有多个filter时此处设置改CorsFilter的优先执行顺序
        FilterRegistrationBean bean = new FilterRegistrationBean<>(new CorsFilter(source));
        bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
        return bean;
    }

}

你可能感兴趣的:(java,java)