403跨域,什么是跨域,如何解决。(CROS)

一、出现跨域的原因

出于浏览器的同源策略限制。同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。

二、什么是跨域

当请求的协议域名端口,任一不相同时就会出现跨域。

举个例子:

当前URL被请求URL是否跨域原因
http://www.abc.com/indexhttp://www.abc.com/info同源(协议、域名、端口都相同)
http://www.abc.com/indexhttps://www.abc.com/index协议不同(http/https)
http://www.abc.com/indexhttp://www.def.com/index域名不同(www.abc.com/www.def.com)
http://www.abc.com/index:8080http://www.abc.com/index:8181端口不同(8080/8181)

三、非同源限制

不能获取不同源的 cookie,LocalStorage 和 indexDB

不能获取不同源的 DOM()

不能发送不同源的 ajax 请求 (可以向不同源的服务器发起请求,但是返回的数据会被浏览器拦截)

四、如何解决跨域

解决跨域,将使用到CROS,cross-origin resource sharing,跨域资源共享。

以下有几种解决方法:

1、使用注解@CrossOrigin,可以放在需要进行跨域请求的controller类上或者指定的方法上。

2、添加设置过滤器。

  @Bean
  public CorsWebFilter corsWebFilter(){
    // cors跨域配置对象
    CorsConfiguration configuration = new CorsConfiguration();
    //设置允许访问的网络
    configuration.addAllowedOrigin("*");
    // 设置是否从服务器获取cookie
    configuration.setAllowCredentials(true);
    // 设置请求方法 * 表示任意
    configuration.addAllowedMethod("*");
    // 所有请求头信息 * 表示任意
    configuration.addAllowedHeader("*");
    // 有效期3600秒
    configuration.setMaxAge(3600L);

    // 配置源对象
    UrlBasedCorsConfigurationSource configurationSource = new UrlBasedCorsConfigurationSource();
    configurationSource.registerCorsConfiguration("/**", configuration);
    // cors过滤器对象
    return new CorsWebFilter(configurationSource);
  }
 
 
 
//或者
 
 
 
@Configuration
public class CorsConfig {
  private CorsConfiguration buildConfig() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    // session 多次访问一致
    corsConfiguration.setAllowCredentials(true);

    // 允许访问的客户端域名
    corsConfiguration.addAllowedOrigin("*"); // 允许任何域名使用
    corsConfiguration.addAllowedHeader("*"); // 允许任何头
    corsConfiguration.addAllowedMethod("*"); // 允许任何方法(post、get等)
    return corsConfiguration;
  }

  @Bean
  public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", buildConfig()); // 对接口配置跨域设置
    return new CorsFilter((CorsConfigurationSource) source);
  }
}

3、直接实现 WebMvcConfigurer 接口

@Configuration
public class CorsConfig1 implements WebMvcConfigurer {
  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry
        //设置允许跨域访问的路径
        .addMapping("/**")
        //是否发送 cookie
        .allowCredentials(true)
        //设置允许跨域访问的源
        .allowedOrigins("*")
        //设置允许请求方式
        .allowedMethods(new String[] {"GET", "POST", "PUT", "DELETE"})
        //允许头部设置
        .allowedHeaders("*")
        //允许响应头部
        .exposedHeaders("*");
  }
}

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值