前后端跨域请求代码实战(vue3.4+springboot2.7.18)

在这里插入图片描述

  • 前端代码 v3.4.21(前端不是主业,所以就贴一贴代码,有疑问评论区见)
  • 后端代码,springboot 2.7.18(后端)

文章内容:
一,后端代码
二,前端代码
三,后端跨域配置
四,测试跨域配置

一,后端:

在这里插入图片描述
接口一:
在这里插入图片描述

接口二:
在这里插入图片描述
启动测试一下接口:
在这里插入图片描述
在这里插入图片描述

二,前端

初始化vue3项目教程链接:vue3环境搭建
此时我们就有了前端工程
在这里插入图片描述

App.vue文件

<script setup>
import t1Query1 from "./components/t1query1.vue"
import t2Query1 from "./components/t2query1.vue"
</script><template><t1Query1/><t2Query1/></template>

main.js文件

import { createApp } from 'vue'
import App from './App.vue'createApp(App).mount('#app')

创建 t1query1.vue 文件(通过点击按钮调用后端接口返回数据到前端)

<template><button @click="fetchData">test1query1获取数据</button><p>{{ data }}</p></template><script>import { ref } from 'vue';import axios from 'axios';export default {setup() {const data = ref('');const fetchData = async () => {try {const response = await axios.get('http://localhost:11111/yyx/test1/query1');data.value = response.data;} catch (error) {console.error('Error fetching data:', error);}};return {data,fetchData};}};</script>

创建 t2query1.vue 文件

<template><button @click="fetchData">test2query1获取数据</button><p>{{ data }}</p></template><script>import { ref } from 'vue';import axios from 'axios';export default {setup() {const data = ref('');const fetchData = async () => {try {const response = await axios.get('http://localhost:11111/yyx/test2/query1');data.value = response.data;} catch (error) {console.error('Error fetching data:', error);}};return {data,fetchData};}};</script>

启动前端项目 此时命令行执行:
cd 项目路径
npm install(当缺少node模块需要执行)
npm run dev
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
跨域存在于前端访问后端的过程,存在一个同源策略,具体可以自己搜搜

三,跨域

后端跨域配置代码:

import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** @program: my-back-app* @description: 跨域的方式:* 1.corsFilter的 bean* 2、下述方法* 3、nginx* 4 spring security 方式*   等等* @author: yangyixin* @create: 2024-04-19 11:07**/
@Configuration
@Slf4j
public class CORSConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {String frontUrl = "http://localhost:5173";//下述表示前端在访问后端的test1下的所有接口 都需要满足的规则要求registry.addMapping("/test1/**")// 该方法用于添加允许跨域访问的路径,String类型,若存在多个路径则需要在CorsRegistry里配置多个(填入后端从contrller以内的路径,不需要填入yml内的相关路径).allowedOriginPatterns(frontUrl)//设置允许跨域请求的来源URL的模式。该方法接受多个参数,每个参数为一个允许的来源URL模式。或者设置"*"//.allowedOrigins("http://localhost:5173")  // 就设置允许跨域请求的来源URL。该方法接受多个参数,每个参数为一个允许的来源URL。或者设置"*".allowedMethods("GET", "POST")   // 设置允许跨域请求的HTTP方法。该方法接受多个参数,每个参数为一种允许的HTTP请求方式.allowedHeaders("*")// 设置允许请求携带的HTTP头信息。该方法接受多个参数,每个参数为一种允许的HTTP头信息。(放行哪些请求头部信息).allowCredentials(true)//设置是否允许跨域请求携带凭证信息。默认情况下,浏览器不会向跨域请求发送Cookie等凭证信息,如果希望携带凭证信息,则需要将allowCredentials方法设置为true.maxAge(3600);//设置响应的缓存时间,单位为秒,默认30分钟。例如,当设置maxAge为3600时,如果浏览器在一小时内再次向同一个目标URL发送跨域请求,//下述表示前端在访问后端的所有接口 都需要满足的规则要求
//        registry.addMapping("/**")
//                .allowedOriginPatterns(frontUrl)
//                //.allowedOrigins("http://localhost:5173")
//                .allowedMethods("GET", "POST")
//                .allowedHeaders("*")
//                .allowCredentials(true)
//                .maxAge(3600);log.info("跨域配置 允许访问:{}", frontUrl);}
}

四,测试

配置完成,重启后端项目
前端界面ok,进入前端界面(vue3不需要重新启动 前端界面也会刷新)
在这里插入图片描述
到此及配置跨域请求完毕

注意

  1. 注意 配置跨域中的addMapping方法的参数,不包括server.servlet.context-path的路径

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

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

相关文章

【ARM 裸机】I.MX 启动方式之启动头文件 1

接上一节&#xff1a;【ARM 裸机】I.MX 启动方式之启动设备的选择&#xff1b; 2、启动头文件 当 BOOT_MODE1 为 1&#xff0c;BOOT_MODE0 为 0 的时候此内部 BOOT 模式&#xff0c;在此模式下&#xff0c;芯片会执 行内部的 BOOT ROM 代码&#xff0c;这段 BOOT ROM 代码会进…

C++引用和指针的区别

在C中&#xff0c;引用和指针都是用于间接访问变量或对象的工具&#xff0c;但它们之间存在一些重要的区别。 引用&#xff08;Reference&#xff09; 引用是变量的别名&#xff0c;它提供了一个已经存在的变量的另一个名字。一旦一个引用被初始化为一个对象&#xff0c;就不…

tensor是pytorch的核心,那torch.tensor和torch.Tensor区别是?

本文重点 从本节课程开始我们将正式开启pytorch的学习了&#xff0c;在深度学习框架中有一个重要的概念叫做张量&#xff0c;它是pytorch的基本操作单位&#xff0c;要想创建tensor有很多的方式&#xff0c;但是有两个torch.tensor和torch.Tensor容易混淆&#xff0c;本节课程…

javase__进阶 day13stream流和方法引用

1.不可变集合 1.1 什么是不可变集合 ​ 是一个长度不可变&#xff0c;内容也无法修改的集合 1.2 使用场景 ​ 如果某个数据不能被修改&#xff0c;把它防御性地拷贝到不可变集合中是个很好的实践。 ​ 当集合对象被不可信的库调用时&#xff0c;不可变形式是安全的。 简单…

docker快速使用简介

进入服务器 ssh root192.0.0.211安装 docker load < bevformer_image.tar修改镜像的REPOSITORY和TAG docker tag a6a4c15ca9db bevformer:1.0其中&#xff0c;a6a4c15ca9db是原来镜像的id。bevformer是修改后的REPOSITORY&#xff1b;1.0是修改后的TAG。 从Docker Hub上…

高精度加减乘除

高精度加法 题目链接&#xff1a;高精度加法 #include <bits/stdc.h> #define int long long using namespace std; const int N 1e55; int a[N],b[N]; int c[N]; int n,m; string s1,s2;signed main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>s1…

大厂面试精华面试刷题

1.自定义unshift实现相同效果 2.数组去重 用vs2019来写这种练习题可以更直观的查看代码执行的效果&#xff0c;最后的代码是控制控制台执行完毕后不自动关闭 use strict;let arr [1, 1, 2, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10] //1.//查重最简单的方法for循环结合splice从数组中…

Flask vs FastApi 性能对比测试

Flask和Fastapi都是Python下流行的Web框架&#xff0c;前者有大量拥趸&#xff0c;是一个老牌框架&#xff0c;后者相对较新&#xff0c;但是利用了异步技术和uvloop&#xff0c;都说性能比Flask好很多&#xff0c;于是就我就对比实测一下。由于Windows下不支持uvloop&#xff…

63、ARM/STM32中IIC相关学习20240417

完成温湿度传感器数据采集实验。 【思路&#xff1a;1.通过IIC通信原理&#xff0c;理解其通信过程&#xff0c;通过调用封装的IIC函数达成主机和从机之间&#xff1a;起始信号、终止信号、读、写数据的操作&#xff1b; 2.了解温湿度传感器控制芯片SI7006的工作原理&#…

【C++】飞机大战项目记录

源代码与图片参考自《你好编程》的飞机大战项目&#xff0c;这里不进行展示。 本项目是仅供学习使用的项目 飞机大战项目记录 飞机大战设计报告1 项目框架分析1.1 敌机设计&#xff1a;1.2 玩家飞机控制&#xff1a;1.3 子弹发射&#xff1a;1.4 游戏界面与互动&#xff1a;1.5…

解决Linux根分区空间不足的方法:利用Home分区进行扩容

前言 在进行系统安装时&#xff0c;一个常见的困扰是默认分区设置可能导致home分区拥有过多的空间&#xff0c;而root分区却显得十分紧缺。这种情况下&#xff0c;用户往往会陷入无法继续安装软件或存储文件的困境。本文将向您展示如何通过合理的调整&#xff0c;将home分区中多…

二叉排序树及实现

二叉排序树及实现 二叉排序树&#xff08;Binary Sort Tree, BST&#xff09;又称为二叉查找树。在一般情况下&#xff0c;查询效率要比链表结构要高。对于二叉排序树中的任何一个非叶子节点&#xff0c;要求左子节点的值比当前节点的值小&#xff0c;右子节点的值比当前节点的…

【6】mysql查询性能优化-关联子查询

【README】 0. 先说结论&#xff1a;一般用inner join来改写in和exist&#xff0c;用left join来改写not in&#xff0c;not exist&#xff1b;&#xff08;本文会比较内连接&#xff0c;包含in子句的子查询&#xff0c;exist的性能 &#xff09; 1. 本文总结自高性能mysql 6…

Python 面向对象——1.基本概念

本章学习链接如下&#xff1a; 基本概念与语法 类&#xff08;Class&#xff09;&#xff1a;定义了一组对象共有的属性和方法的蓝图。类是创建对象的模板。 对象&#xff08;Object&#xff09;&#xff1a;类的实例。对象包含实际的数据和操作数据的方法。 属性&#xff0…

NLP_知识图谱_三元组实战

文章目录 三元组含义如何构建知识图谱模型的整体结构基于transformers框架的三元组抽取baselinehow to use预训练模型下载地址训练数据下载地址 结构图代码及数据bertconfig.jsonvocab.txt datadev.jsonschemas.jsontrain.jsonvocab.json 与bert跟data同个目录model.pytrain.py…

原型和原型链--图解

https://juejin.cn/post/7255605810453217335 prototype是函数的属性&#xff08;一个对象&#xff09;&#xff0c;不是对象的属性&#xff0c;普通函数和构造函数的prototype属性是空对象&#xff5b;&#xff5d;&#xff08;其实有2个属性&#xff0c;一个是constructor&a…

Vue3: toRefs与toRef的基本使用

一、前言 本文主要介绍toRefs与toRef的基本使用。 二、内容 1、基本概念 作用: toRefs与toRef可以将一个响应式对象中的每一 个属性&#xff0c;转换为ref对象&#xff1b;不同 toRefs与toRef功能一致&#xff0c;但toRefs可以批量转换。 2、toRefs 如果把reactive定义的…

记录交叉编译环境配置--海思开发板的 嵌入式nginx和 php的移植

嵌入式 lnmp搭建的记录 一些交叉编译的配置环境思路分享&#xff1a;P&#xff1a;php编译PHP可能遇到的问题configure阶段&#xff1a;Makefile-make阶段&#xff1a;Makefile-make install阶段&#xff1a; N&#xff1a;Nginx 文章比较水&#xff0c;并没有没解决什么实际问…

java面向对象的继承Shape

* - Shape基类 拥有draw()和erase()两个方法 * - 基于Shape类创建Circle子类 * - 基于Shape类创建Square子类 * - 创建Shape类创建Triangle子类 * - 创建随机形状发生的类(不是子类) * - 定义公共类(测试类),创建Shape类的数组对象长度为10&#xff0c;并为对象数组赋值其内容C…

二维码门楼牌管理应用平台建设:助力场所整改与消防安全

文章目录 前言一、二维码门楼牌管理应用平台的构建背景二、二维码门楼牌管理应用平台在场所整改中的作用三、二维码门楼牌管理应用平台的意义与价值四、二维码门楼牌管理应用平台的未来展望 前言 随着城市管理的日益精细化&#xff0c;二维码门楼牌管理应用平台的建设成为了提…