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("*"); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。