【SpringBoot】MVC配置解决跨域但仍然存在跨域

导读:本篇文章讲解 【SpringBoot】MVC配置解决跨域但仍然存在跨域,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

1. 跨域问题出现与解决

image-20221126165938069

检查SpringBoot中的MVC配置。

public void addCorsMappings(CorsRegistry registry) {
    //允许跨域访问资源定义
    registry.addMapping("/**")
        //(只允许本地的指定端口访问)允许所有
        .allowedOrigins("*")
        // 允许所有方法
        .allowedMethods("*")
        //允许所有请求头
        .allowedHeaders("*")
        .maxAge(3600);
}

发现后端已经允许跨域了。所以排除后端未进行跨域解决的猜想。

接着查看后端日志

image-20221126170320309

这里出现了两次缺少token,检查浏览器网络信息

image-20221126170447658

发现这里有两次请求,点开第一个请求

image-20221126170530989

第一个请求携带了token,但是并未成功请求

接着查看第二个请求

image-20221126170606184

第二个请求并无token,并且状态码为500。

Tps:

options 请求就是预检请求,可用于检测服务器允许的 http 方法。当发起跨域请求时,由于安全原因,触发一定条件时浏览器会在正式请求之前自动先发起 OPTIONS 请求,即 CORS 预检请求,服务器若接受该跨域请求,浏览器才继续发起正式请求。

因此,应该是因为OPTIONS请求未携带token,被SpringMCV的拦截器拦截下来,导致预检请求(CORS 预检请求)未成功,因此报了跨域错误。

在拦截器中打印一下请求的方式

image-20221126171235226

通过后端日志发现两个无token均为OPTIONS请求,并且两个OPTIONS请求均无通过拦截器,因此我在SpringMVC的拦截器中尝试放行OPTIONS请求,看问题能不能解决。

if ("OPTIONS".equals(request.getMethod())) {
    //true是直接放行
    return true;
}

image-20221126172027329

跨域问题成功解决!!!


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/94955.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!