SpringBoot中遇到跨域了怎么办???

2021-01-14 14:50:40 浏览数 (2)

跨域是什么意思???

做开发的小伙伴多少会看过这个报错例子吧 下面我们就来说说跨域是什么

要了解跨域首先,我们需要了解一些前置知识:

一个URL的组成: 协议 域名(子域名 主域名) 端口号 资源地址 http://www.baidu.com:8080/

协议,子域名,主域名,端口号 四项组成部分中,有一项不同 ,不同的域之间互相访问资源,就是不同的域 就被称之为跨域。

随着前后端分离开发的越来越普及,会经常遇到跨域的问题

下面我们介绍几种通过springboot的配置来解决跨域问题:第一种:设置允许全局跨域请求

代码语言:javascript复制
@Configuration
public class CorsConfig {
  private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1 允许任何域名使用
        corsConfiguration.addAllowedHeader("*"); // 2 允许任何头
        corsConfiguration.addAllowedMethod("*"); // 3 允许任何方法(post、get等)
        return corsConfiguration;
    }

    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig()); // 4
        return new CorsFilter(source);
    }
  

}

‍或者使用这种配置:

代码语言:javascript复制
@Configuration
public class GlobalCorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        //1.添加CORS配置信息
        CorsConfiguration config = new CorsConfiguration();
          //放行哪些原始域
          config.addAllowedOrigin("*");
          //是否发送Cookie信息
          config.setAllowCredentials(true);
          //放行哪些原始域(请求方式)
          config.addAllowedMethod("*");
          //放行哪些原始域(头部信息)
          config.addAllowedHeader("*");
          //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
          config.addExposedHeader("content-type");

        //2.添加映射路径
        UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
        configSource.registerCorsConfiguration("/**", config);

        //3.返回新的CorsFilter.
        return new CorsFilter(configSource);
    }
}

第二种:使用注解方式

代码语言:javascript复制
@RequestMapping("/test")
@CrossOrigin("http://localhost:10000")
public Map<String,String> vv(){
    Map<String,String> hmap = new HashMap<String,String>();
    hmap.put("string","success");
    return hmap;
}

‍第三种:单独对某个方法设置响应头

代码语言:javascript复制
@RequestMapping("/test")
@CrossOrigin("http://localhost:8080")
public Map<String,String> v(){
    Map<String,String> test = new HashMap<String,String>();
    test.put("test","success");
    return test;
}

通过上述方法即可将跨域问题解决掉 end

0 人点赞