随笔(七)『SpringBoot 解决跨域(全局)』

1、问题:Access-Control-Allow-Origin

2、解决方式一:返回新的CorsFilter【全局】

package com.baihua.common.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

/**
 * 通过返回新的CorsFilter解决跨域问题【全局】
 */
@Configuration
public class CrosConfig {

    @Bean
    public CorsFilter getCorsFilter() {
        // 1、配置CROS信息
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 放行哪些请求源
        corsConfiguration.addAllowedMethod("*"); // 放行哪些请求方式(如: GET、POST...)
        corsConfiguration.addAllowedHeader("*"); // 放行哪些请求头
        corsConfiguration.setMaxAge(3600L); // 跨域请求最大有效时长

        // 2、对接口配置跨域设置
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", corsConfiguration);

        // 3、返回新的CorsFilter
        return new CorsFilter(source);
    }
}

3、解决方式二:重写WebMvcConfigurer接口的addCorsMappings方法【全局】

package com.baihua.common.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

/**
 * 通过重写WebMvcConfigurer接口的addCorsMappings方法,解决跨域问题【全局】
 */
@Configuration
public class WebMvcCrosConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 映射路径
                .allowedOrigins("*") // 放行哪些请求源
                .allowedMethods("*") // 放行哪些请求方式(如: GET、POST...)
                .allowedHeaders("*") // 放行哪些请求头
                .maxAge(3600L); // 跨域请求最大有效时长
    }
}

4、测试结果【成功解决】

5、gateWay配置时

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

/**
 * gateWay网关配置时,注意导包
 * org.springframework.web.cors.reactive.CorsWebFilter;
 * org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;
 * 
 * @Author baihua
 * @Date 2024/3/11
 */
@Configuration
public class CrosConfig {
    @Bean
    public CorsWebFilter corsFilter(){
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.setAllowCredentials(true);
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedMethod("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addExposedHeader("*");
        UrlBasedCorsConfigurationSource corsConfigurationSource = new UrlBasedCorsConfigurationSource();
        corsConfigurationSource.registerCorsConfiguration("/**",corsConfiguration);
        //3. 返回新的CorsFilter
        return new CorsWebFilter(corsConfigurationSource);
    }

}
posted @   小昕昕  阅读(152)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示