当前位置: 首页 > 知识库问答 >
问题:

vue.js - Vue + Axios跨域请求Spring Boot后端失败,如何解决?

姬欣怡
2024-09-23

Vue中用axios.get('http://localhost:8080/article/list')访问本机的springboot项目,报跨域错误。

在controller类中注解了CrossOrign,没用

@CrossOrigin("*")
@RestController
@RequestMapping("/article")

重写了WebMvcConfigurer的addCorsMappings也没用。

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/*")
                .allowedOriginPatterns("*")
                .allowedMethods("GET")
                .maxAge(3600)
                .allowCredentials(true);
    }
}

在vite.config.js写server代理也没用

server: {
    proxy: {
      '/': {
        target: 'http://localhost:8080',
        changeOrigin: true
      }
    }
  }

共有2个答案

牛骞仕
2024-09-23

回答:你的跨域设置的有问题,只需要配置跨域类或者在controller里面加CrossOrigin注解,不需要两个都加,主要是你两个都配错了;你可以考虑只配一个,它们两个分别有各自的优先级,一起配不必要的

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                //是否发送Cookie
                .allowCredentials(true)
                //放行哪些原始域
                .allowedOrigins("*")
                .allowedMethods(new String[]{"GET", "POST", "PUT", "DELETE"})
                .allowedHeaders("*")
                .exposedHeaders("*");
    }
}
@RestController
@CrossOrigin(origins = "*")
public class HelloController {
    @RequestMapping("/hello")
    public String hello() {
        return "hello world";
    }
}
南宫龙野
2024-09-23

跨域问题(CORS)通常发生在前端应用尝试访问不同源(即协议、域名、端口任一不同)的服务器资源时。在你的情况中,尽管你在Spring Boot后端已经配置了CORS,但问题可能仍然存在,这可能是由于几个不同的原因。以下是一些解决步骤和检查点:

  1. 确认CORS配置是否正确
    你的CORS配置看起来是基本正确的,但有一些小地方可以调整或确认。

    • 确保@CrossOrigin("*")注解或WebMvcConfigurer的实现没有被其他配置或注解(如方法级别的CORS注解)覆盖。
    • 尝试在WebMvcConfigurer中更明确地设置允许的源,而不是使用"*",虽然这通常应该工作,但有时候明确指定可以避免一些潜在的问题。
  2. 检查Spring Boot的版本
    不同的Spring Boot版本可能对CORS的处理略有不同。确保你查看的CORS配置文档与你正在使用的Spring Boot版本相匹配。
  3. 检查Spring Security配置(如果使用了):
    如果你的Spring Boot应用集成了Spring Security,并且进行了安全配置,那么这些配置可能会覆盖CORS设置。确保你的安全配置没有阻止CORS请求。
  4. 浏览器缓存
    有时浏览器缓存可能会导致CORS配置更改看起来没有生效。尝试清除浏览器缓存或使用无痕/隐私模式重新加载页面。
  5. Vue和Axios的CORS问题

    • 跨域问题通常是在服务器端配置的,但客户端(如Vue和Axios)也可能影响请求的行为。确保你的Axios请求没有设置任何会干扰CORS的自定义头部。
    • 既然你已经尝试了在Vite中设置代理,但似乎没有成功,请检查你的Vite配置是否完全正确,并且确保你正在开发模式下运行Vue应用,因为代理通常只在开发模式下有效。
  6. 查看浏览器控制台和网络日志
    浏览器控制台和网络日志通常会提供关于CORS错误的详细信息,包括被拒绝的请求和原因。这可以帮助你更准确地诊断问题。
  7. 使用Postman或Curl测试
    使用Postman或Curl等工具直接向Spring Boot后端发送请求,以确认后端是否实际上在处理CORS请求时存在问题。这可以帮助你排除前端或Vite配置的问题。

如果以上步骤都不能解决问题,可能需要更详细地检查你的代码和配置,或者考虑在Spring Boot的日志中增加更详细的调试信息,以查看CORS请求是如何被处理的。

 类似资料:
  • 与手上其他项目一样,axios.create的二次封装是一样的,而 API 模块从链式调用改成了单个函数导出调用。 然后,接口调用时出了问题,期望有大佬能够帮忙看看如何解决。 以下是部分代码: 提供项目接口目录:

  • 本文向大家介绍基于VUE移动音乐WEBAPP跨域请求失败的解决方法,包括了基于VUE移动音乐WEBAPP跨域请求失败的解决方法的使用技巧和注意事项,需要的朋友参考一下 在学习一位vue大牛的课程《VUE2.0移动端音乐App开发》时,由于vue的版本原因遇到了一些问题 这是其中之一,花费了很多的时间去解决 虽然搞定了这个问题,但是很多东西理解也不是很到位,下面详细说: 系统windows,vue版

  • 本文向大家介绍完美解决axios跨域请求出错的问题,包括了完美解决axios跨域请求出错的问题的使用技巧和注意事项,需要的朋友参考一下 错误信息: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the req

  • 本文向大家介绍详解Vue-cli 创建的项目如何跨域请求,包括了详解Vue-cli 创建的项目如何跨域请求的使用技巧和注意事项,需要的朋友参考一下 问题描述: 使用 Vue-cli 创建的项目,开发地址是 localhost:8023,需要访问 localhost:9000 上的接口 分析原因: 不同域名之间的访问,需要跨域才能正确请求。跨域的方法很多,通常都需要后台配置 不过 Vue-cli 创

  • 本文向大家介绍详解SpringBoot多跨域请求的支持(JSONP),包括了详解SpringBoot多跨域请求的支持(JSONP)的使用技巧和注意事项,需要的朋友参考一下 在我们做项目的过程中,有可能会遇到跨域请求,所以需要我们自己组装支持跨域请求的JSONP数据,而在4.1版本以后的SpringMVC中,为我们提供了一个AbstractJsonpResponseBodyAdvice的类用来支持j

  • 本文向大家介绍详解AngularJS如何实现跨域请求,包括了详解AngularJS如何实现跨域请求的使用技巧和注意事项,需要的朋友参考一下 跨域,前端开发中经常遇到的问题,AngularJS实现跨域方式类似于Ajax,使用CORS机制。 下面阐述一下AngularJS中使用$http实现跨域请求数据。 AngularJS XMLHttpRequest:$http用于读取远程服务器的数据 一、$ht