欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Spring Boot设置支持跨域请求过程详解

程序员文章站 2022-12-02 19:16:11
现代浏览器出于安全的考虑, http 请求时必须遵守同源策略,否则就是跨域的 http 请求,默认情况下是被禁止的,ip(域名)不同、或者端口不同、协议不同(比如 http、https)都会造成跨域问...

现代浏览器出于安全的考虑, http 请求时必须遵守同源策略,否则就是跨域的 http 请求,默认情况下是被禁止的,ip(域名)不同、或者端口不同、协议不同(比如 http、https)都会造成跨域问题。

一般前端的解决方案有:

  • ① 使用 jsonp 来支持跨域的请求,jsonp 实现跨域请求的原理简单的说,就是动态创建<script>标签,然后利用<script>的 src 不受同源策略约束来跨域获取数据。缺点是需要后端配合输出特定的返回信息。
  • ② 利用反应代理的机制来解决跨域的问题,前端请求的时候先将请求发送到同源地址的后端,通过后端请求转发来避免跨域的访问。

后来 html5 支持了 cors 协议。cors 是一个 w3c 标准,全称是”跨域资源共享”(cross-origin resource sharing),允许浏览器向跨源服务器,发出 xmlhttprequest 请求,从而克服了 ajax 只能同源使用的限制。它通过服务器增加一个特殊的 header[access-control-allow-origin]来告诉客户端跨域的限制,如果浏览器支持 cors、并且判断 origin 通过的话,就会允许 xmlhttprequest 发起跨域请求。

前端使用了 cors 协议,就需要后端设置支持非同源的请求,spring boot 设置支持非同源的请求有两种方式。

第一,配置 corsfilter。

@configuration
public class globalcorsconfig {
  @bean
  public corsfilter corsfilter() {
    corsconfiguration config = new corsconfiguration();
     config.addallowedorigin("*");
     config.setallowcredentials(true);
     config.addallowedmethod("*");
     config.addallowedheader("*");
     config.addexposedheader("*");

    urlbasedcorsconfigurationsource configsource = new urlbasedcorsconfigurationsource();
    configsource.registercorsconfiguration("/**", config);

    return new corsfilter(configsource);
  }
}

需要配置上述的一段代码。第二种方式稍微简单一些。

第二,在启动类上添加:

public class application extends webmvcconfigureradapter { 

  @override 
  public void addcorsmappings(corsregistry registry) { 

    registry.addmapping("/**") 
        .allowcredentials(true) 
        .allowedheaders("*") 
        .allowedorigins("*") 
        .allowedmethods("*"); 

  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。