【已解决】记 Vue3+SpringBoot 前后端分离项目部署时的一次跨域问题

news2024/11/17 1:51:34

问题背景是在一次部署开发环境时,由于是前后端分离项目(前端Vue3,后端SpringBoot),SpringBoot 使用 Docker 部署,前端访问服务接口时出现跨域问题。

不知道什么是跨域问题的小伙伴可以查看另一篇文章:快速解决Spring Boot跨域困扰:使用CORS实现无缝跨域支持_I’m Jie的博客-CSDN博客

后端服务在现

创建一个最简单的 SpringBoot 项目,在 Controller 中添加一个返回 JSON 数据的接口用于后续前端项目访问,启动项目:

@RestController
public class LoginController {

    @PostMapping("/login")
    public User login(@RequestBody User user){
        return user;
    }

}

前端工程在现

使用 npm init vue@latest 命令创建一个 Vue3 工程,执行 npm install 命令安装依赖,之后使用 npm run dev 命令启动项目,访问 http://127.0.0.1:5173/:

image-20230821215838530

执行 npm install axios 命令安装 Axios 用于访问后端服务的接口,并在 http.js 文件中添加 Axios 对应的配置:

import axios from 'axios'

// 创建axios实例
const http = axios.create({
  baseURL: 'http://127.0.0.1:8080',
  timeout: 5000
})

// axios请求拦截器
http.interceptors.request.use(config => {
  return config
}, e => Promise.reject(e))

// axios响应式拦截器
http.interceptors.response.use(res => res.data, e => {
  return Promise.reject(e)
})

export default http

在 testAPI.js 文件中封装对应的 API:

//封装测试接口函数
import http from '@/utils/http'

export const loginApi = ({ account, password }) => {
    return http({
        url: '/login',
        method: 'POST',
        data: {
            account:account,
             password:password
        }
    })
}

在 Vue 文件中进行调用:

import http from '@/utils/http'
import { onMounted } from 'vue';

//测试接口
onMounted(()=>{
  http.post('/login', {
    username: 'Fred',
    password: 'Flintstone'
  })
  .then(function (response) {
    console.log(response);
  })
  .catch(function (error) {
    console.log(error);
  });

})

刷新页面,查看开发者工具,发现报跨域问题,原因是我们的前端工程使用的是 127.0.0.1 和 5173 端口,而后端服务使用的是8080端口,所以不可避免出现跨域问题:

image-20230821220116947

Access to XMLHttpRequest at 'http://127.0.0.1:8080/login' from origin 'http://localhost' 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.

访问位于“”的XMLHttpRequesthttp://127.0.0.1:8080/login’来自原点’http://localhost’已被CORS策略阻止:对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“access control Allow Origin”标头。

此时响应头如下:

image-20230821210408032

解决跨域问题

在后端 SpringBoot 服务中添加配置类解决跨域问题:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 拦截所有的请求
                .allowedOrigins("*")  // 可跨域的域名,可以为 *
                .allowCredentials(true)
                .allowedMethods("*")   // 允许跨域的方法,可以单独配置
                .allowedHeaders("*");  // 允许跨域的请求头,可以单独配置
    }
    
}

但是当前端工程访问时,依然显示跨域问题,查看后端日志输出,找到输出的日志,异常信息如下:

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: When allowCredentials is true, allowedOrigins cannot contain the special value "*" since that cannot be set on the "Access-Control-Allow-Origin" response header. To allow credentials to a set of origins, list them explicitly or consider using "allowedOriginPatterns" instead.

org.springframework.web.util.NestedServlet异常:请求处理失败;嵌套异常java.lang.IollegalArgumentException:当allowCredentials为true时,allowedOrigins不能包含特殊值“*”,因为该值不能在“Access Control Allow Origin”响应标头上设置。要允许一组来源的凭据,请明确列出它们,或者考虑使用“allowedOriginPatterns”。

重新修改配置类:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")  // 拦截所有的请求
                .allowedOriginPatterns("*")  // 使用 allowedOriginPatterns
                .allowCredentials(true)
                .allowedMethods("*")   // 允许跨域的方法,可以单独配置
                .allowedHeaders("*");  // 允许跨域的请求头,可以单独配置
    }

}

重启 SpringBoot 服务,前端再次访问接口,成功访问,解决跨域问题:

image-20230821210038830

此时响应头如下:

image-20230821210311411

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/908719.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于5G边缘网关的储能在线监测方案

近年以来,光伏、风力、水力发电等产业发展迅速,新能源在电力市场的占比持续增加,已经成为电力系统的重要组成部分。但由于光伏、风力、水力等发电方式存在天然的波动性,因此也需要配套储能、蓄能系统,保障新能源运行和…

EasyExcel工具 Java导出Excel表数据

EasyExcel 优点坐标依赖读Excel最简单的读的对象写Excel最简单的写的对象最简单的读的监听器填充Excel简单填充(对象)复杂填充(对象和列表)官网:https://easyexcel.opensource.alibaba.com/ EasyExcel是一个基于Java的、快速、简洁、解决大文件内存溢出的Excel处理工具。…

129.【Spring 注解_IOC】

Spring 注解_IOC容器 (一)、组件注册1. Configuration 与 Bean 容器注册组件(1).无注解注入方式(2).注解注入方式 2. ComponentScan 自动扫描组件和自动扫描规则(1).无注解扫描方式(2).注解扫描注入方式(3).指定扫描或不扫描的包 (过滤) 3. 自定义TypeFilter指定过滤规则 Filte…

【stable-diffusion使用扩展+插件和模型资源(上】

文章目录 前言一、插件推荐1.qrcode-monster2.sd-webui-openpose-editor3.sd-webui-depth-lib4.roop(换脸插件)5.sd-webui-qrcode-toolkit(艺术二维码)5.光源控制6.二次元转真人7.动态视频转场(loopback-wave&#xff…

Unity中实现获取InputField选中的文字

一:前言 获取到选中的文字:哈哈 二:实现 UGUI的InputField提供了selectionAnchorPosition和selectionFocusPosition,开始选择时的光标下标和当前光标下标 using UnityEngine; using UnityEngine.EventSystems; using UnityEngin…

Java之包,权限修饰符,final关键字详解

包 2.1 包 包在操作系统中其实就是一个文件夹。包是用来分门别类的管理技术,不同的技术类放在不同的包下,方便管理和维护。 在IDEA项目中,建包的操作如下: 包名的命名规范: 路径名.路径名.xxx.xxx // 例如&#xff…

视频高效批量剪辑,轻松制作底片效果的视频,实现剪辑自由

大家好!在进行视频剪辑时,有时候我们需要对多个视频进行制作底片效果,以便获得更好的视觉效果。为了让您能够轻松制作底片效果视频,我们特别推出了一款便捷工具,让您能够快速制作视频底片效果,实现更加出色…

搞定二叉树

树的名词与概念 子树:树是一个有限集合,子树则是该集合的子集。就像套娃一样,一棵树下面还包含着其子树。比如,树T1 的子树为 树T2、T3、T4,树T2的子树为 T5、T6 。 上图中还有许多子树没有标记出来 。 结点(Node)&am…

wustojc3013字母对应的ASCII 码

#include <stdio.h> int main() {char b;scanf("%c",&b);printf("%d",b);//利用默认强转&#xff0c;字符会打印成ascll码值return 0;}

【韩顺平 零基础30天学会Java】程序流程控制(2days)

day1 程序流程控制&#xff1a;顺序控制、分支控制、循环控制 顺序控制&#xff1a;从上到下逐行地执行&#xff0c;中间没有任何判断和跳转。 Java中定义变量时要采用合法的前向引用。 分支控制if-else&#xff1a;单分支、双分支和多分支。 单分支 import java.util.Scann…

【校招VIP】测试专业课之OSI七层模型

考点介绍&#xff1a; 在 OSI 模型中&#xff0c;每一层都依赖于下一层&#xff0c;并将数据传递给下一层。同时&#xff0c;每一层也可以向上一层提供特定的服务。这种分层结构使得网络管理员可以更轻松地管理网络&#xff0c;同时使得网络协议的设计更加灵活。 『测试专业课…

学习设计模式之观察者模式,但是宝可梦

前言 作者在准备秋招中&#xff0c;学习设计模式&#xff0c;做点小笔记&#xff0c;用宝可梦为场景举例&#xff0c;有错误欢迎指出。 观察者模式 观察者模式定义了一种一对多的依赖关系&#xff0c;一个对象的状态改变&#xff0c;其他所有依赖者都会接收相应的通知。 所…

阿里云通用算力型u1云服务器CPU性能详细说明

​阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xff…

外贸邮箱前缀选择指南:技巧揭秘!

外贸邮箱前缀用什么好&#xff1f;常见的外贸邮箱前缀有 zoho.com.cn&#xff0c; foxmail.com&#xff0c; hotmail.com&#xff0c; outlook.com&#xff0c; yahoo.com等等。那么这些前缀之间又有什么区别呢&#xff1f;选择哪个前缀对外贸业务更有利呢&#xff1f; 首先&am…

如何通过Side Effects来使得你使用Compose变的得心应手?

作者&#xff1a;clwater 虽然我使用Compose已经有了一段时间的, 但我还是觉得使用起来束手束脚的. 究其原因, 大概是coding时的思路还没有完全转换过来, 还没有沉浸在"Compose is Function"之中. 和我们熟悉的View不同, 当我们调用Compose之后, 我们就失去了它的修改…

代码审计-审计工具介绍-DAST+SAST+IAST项目

DASTSASTIAST项目介绍 DAST&#xff1a; 动态应用程序安全测试&#xff08;Dynamic Application Security Testing&#xff09;技术在测试或运行阶段分析应用程序的动态运行状态。它模拟黑客行为对应用程序进行动态攻击&#xff0c;分析应用程序的反应&#xff0c;从而确定该We…

*看门狗2_思考多组看门狗对多任务的监控

多任务系统中 一般结合嵌入式操作系统&#xff0c;设置一个优先级级别最高的任务作为监视器&#xff0c;以监视各个应用任务是否正常运行&#xff0c;该监视器即为软件看门狗&#xff0c;该任务对其他任务都设定一个计时器&#xff0c;每个被监视的任务在设定的时间内对软件看门…

企业级私有化部署即时通讯,完美替代SaaS平台

在数字化转型的时代&#xff0c;企业越来越需要安全、高效和可扩展的解决方案来管理其运营。作为通用办公行业的领军品牌&#xff0c;WorkPlus在企业级私有化部署领域成为改变者。凭借其尖端功能和全面的功能性&#xff0c;WorkPlus提供了传统的软件即服务&#xff08;SaaS&…

SELinux 入门 pt.1

哈喽大家好&#xff0c;我是咸鱼 文章《SELinux 导致 Keepalived 检测脚本无法执行》以【keepalived 无法执行检测脚本】为案例向大家简单介绍了关于 SELinux 的一些概念 比如说什么是自主访问控制 DAC 和 强制访问控制 MAC&#xff1b;SELinux 安全上下文的概念等等 那么今…

洛谷 P2715 ccj与zrz之在回家的路上 艰辛的解题过程

时隔将近两个月&#xff0c;我回来了哈哈哈哈哈哈哈哈哈。 看着一周小结的排名越来越低太难受了&#xff0c;于是我回来继续写文章 今天这道题其实不难&#xff0c;重点是说一下解题过程中遇到的麻烦和坑点 题目描述 给出一个算式&#xff08;a*bc或a/bc或abc或a-bc&#xff0…