Vue + Spring:没有通过 CORS 测试

Posted

技术标签:

【中文标题】Vue + Spring:没有通过 CORS 测试【英文标题】:Vue + Spring: Does not pass the CORS test 【发布时间】:2019-12-28 15:17:42 【问题描述】:

我的 Spring 应用程序在地址 localhost:8081 上运行 我的前端 Vue.js 在地址 localhost:8080 上运行。

我有 WebMvcConfig:

...

@Configuration
public class WebMvcConfig implements WebMvcConfigurer 

    @Override
    public void addCorsMappings(CorsRegistry registry) 
        registry
            .addMapping("*")
            .allowedOrigins("http://localhost:8080");
    



我在 Vue 组件中有请求

import HTTP from '../api/http-common'
...
 HTTP.post('/registration', this.form)
                    .then(response => 
                        if (response.data.errors) 
                            this.errors = response.data.errors
                         else 
                            this.$router.push("/");
                        
                    )

这里是http-common

import axios from 'axios'

export default axios.create(
    baseURL: 'http://localhost:8081/api'
)

它以前可以工作,我在WebMvcConfig 下:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer 

    @Override
    public void addCorsMappings(CorsRegistry registry) 
        registry
            .addMapping("/api/registration")
            .allowedOrigins("http://localhost:8080");
    


然后我必须向地址 localhost:8081/api/activate/code 发出请求。 我在“/api/activate/**”上替换了“/api/registration”,但它不起作用。现在这两个设置都不起作用了。

我想允许来自 localhost:8080(我的前端 Vue.js 正在运行的地方)的所有请求

我在浏览器 Chrome 中进行了下一次 CORS 测试:

GENERAL
Request URL: http://localhost:8081/api/registration
Request Method: OPTIONS
Status Code: 403 
Remote Address: [::1]:8081
Referrer Policy: no-referrer-when-downgrade

RESPONSE HEADER
Allow: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Content-Length: 20
Date: Fri, 23 Aug 2019 09:30:42 GMT
Expires: 0
Pragma: no-cache
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
X-XSS-Protection: 1; mode=block

REQUEST HEADER
Provisional headers are shown
Access-Control-Request-Headers: content-type
Access-Control-Request-Method: POST
Origin: http://localhost:8080
Referer: http://localhost:8080/registration
Sec-Fetch-Mode: no-cors
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/76.0.3809.100 Safari/537.36

来自控制台的错误:

Access to XMLHttpRequest at 'http://localhost:8081/api/registration' from origin 'http://localhost:8080' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

createError.js?2d83:16 Uncaught (in promise) Error: Network Error
    at createError (createError.js?2d83:16)
    at XMLHttpRequest.handleError (xhr.js?b50d:81)

【问题讨论】:

【参考方案1】:

接下来我需要写,然后就可以了:

.addMapping("/api/**")

【讨论】:

以上是关于Vue + Spring:没有通过 CORS 测试的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spring Boot 中测试 CORS?当我在 MockMvcBuilders 中尝试时,尽管 Origin 错误,它总是返回 200

Spring Boot,CORS 问题:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态

部署到 Google App Engine 时 Spring Boot CORS 配置不起作用

CORS 策略:请求的资源 Spring Boot Rest API 和 VUE 上不存在“Access-Control-Allow-Origin”标头

没有弹簧安全性的 Spring Boot + React CORS 问题

Spring 4 Security + CORS + AngularJS - 奇怪的重定向