Springboot前后端分离项目配置跨域实现过程解析

yizhihongxing

下面我会详细讲解“Springboot前后端分离项目配置跨域实现过程解析”的完整攻略,过程中会包含两条示例说明。

什么是跨域?

在浏览器中,当页面的协议、域名、端口号有任意一个不同,都会被认为是不同的域,这就是跨域。浏览器出于安全性考虑,会限制页面中向其它域发送网络请求,这样会导致前后端分离项目中可能会出现的跨域问题。为了解决这个问题,我们需要了解一下如何配置跨域。

如何配置Springboot跨域?

Springboot中跨域的配置比较简单,只需要在后端controller中添加跨域注解即可。

在controller中添加注解:

@CrossOrigin(origins = "*",maxAge = 3600)
@RestController
@RequestMapping("/user")
public class UserController {

// Code here

}

其中,@CrossOrigin(origins = "*",maxAge = 3600)表示允许所有的跨域请求,并且缓存60分钟内的跨域请求。

如果需要更加详细的配置,可以使用@CrossOrigin注解的各个参数进行配置,例如:

@CrossOrigin(origins = {"http://localhost:8080","http://192.168.1.1:8080"}, maxAge = 3600, allowedHeaders = "*", allowCredentials = "true", methods = {RequestMethod.GET, RequestMethod.POST, RequestMethod.PUT, RequestMethod.DELETE})
@RestController
@RequestMapping("/user")
public class UserController {

// Code here

}

其中各个参数的说明如下:

  • origins:表示允许跨域访问的域名列表,可以使用通配符*表示允许所有域名访问。
  • maxAge:表示响应的最大缓存时间,单位为秒,需要注意的是该配置主要用于设置Preflight请求的响应信息。
  • allowedHeaders:表示允许的请求头信息,使用通配符*表示允许所有请求头。
  • allowCredentials:表示是否允许携带Cookie等凭据信息,在实际应用中,如果需要携带凭据信息,则需要将该参数的值设为true
  • methods:表示允许的请求方法。

示例说明

示例一

我们假设后端的Springboot应用运行在http://localhost:8080,前端的React应用运行在http://localhost:3000,接下来我们来演示一下如何进行跨域配置。

后端配置

在后端controller中添加跨域注解:

@CrossOrigin(origins = "http://localhost:3000")
@RestController
@RequestMapping("/user")
public class UserController {

// Code here

}

该配置表示允许http://localhost:3000域下的所有请求进行跨域访问。

前端请求

在前端发送请求时,只需要设置请求头即可。例如:

fetch('http://localhost:8080/user', {
   method: 'GET',
   credentials: 'include',
   headers: {
     'Content-Type': 'application/json',
     'Authorization': 'Bearer ' + localStorage.getItem('token')
   }
})
.then(res => res.json())
.then(data => console.log(data))
.catch(error => console.error(error));

在请求头中设置了Content-TypeAuthorization两个请求头,这两个请求头也需要在后端的允许范围内,否则会被浏览器拦截。

示例二

我们假设前端的Vue应用运行在http://localhost:8080,使用了axios库进行网络请求,后端的Springboot应用运行在http://localhost:9090,接下来我们来演示一下如何进行跨域配置。

后端配置

在后端controller中添加跨域注解:

@CrossOrigin(origins = "http://localhost:8080")
@RestController
@RequestMapping("/user")
public class UserController {

// Code here

}

前端配置

在前端的请求中设置好网络请求地址即可。例如:

axios({
  url: 'http://localhost:9090/user',
  method: 'get',
  headers: {'Content-Type': 'application/json'}
}).then(function (response) {
  console.log(response.data);
}).catch(function (error) {
  console.error(error);
});

如上所述,我们可以使用axios库发送跨域请求,只需要在请求头中设置Content-Type即可。这里需要注意的是,axios的默认请求是Ajax,而浏览器对于Ajax请求和普通请求的处理方式有所区别,因此需要对参数进行一些设置,例如设置withCredentials表示允许携带凭据信息。

axios.defaults.withCredentials = true;

总结

通过配置跨域,我们可以在前后端分离的项目中实现跨域请求,为实现更好的用户体验提供了更多可能性。以上就是Springboot前后端分离项目配置跨域实现过程解析的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Springboot前后端分离项目配置跨域实现过程解析 - Python技术站

(0)
上一篇 2023年5月28日
下一篇 2023年5月28日

相关文章

  • mpvue 如何使用腾讯视频插件的方法

    为了使用腾讯视频插件,应该先安装该插件。在命令行里输入以下命令进行安装: npm install wechat-miniprogram-video –save 安装完成后,根据以下步骤使用mpvue和腾讯视频插件: 1.在 Vue 实例中的生命周期created中使用如下代码引入腾讯视频插件及样式: import ‘wechat-miniprogram-v…

    Vue 2023年5月28日
    00
  • JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析

    下面是详细讲解“JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析”的完整攻略。 1. 需求分析 我们的目标是实现在HTML页面中自定义一个上传图片按钮,并且在用户选择上传图片后,能够将图片显示在页面上。 需要具备以下功能: 自定义上传图片按钮 选择图片文件后上传并显示图片 将图片文件转换为base64编码 2. HTML布局 首先,我们需要在HT…

    Vue 2023年5月28日
    00
  • Vue.js 无限滚动列表性能优化方案

    下面我将详细讲解“Vue.js 无限滚动列表性能优化方案”的完整攻略。 什么是无限滚动列表? 无限滚动列表是一种优化页面性能和用户体验的技术,它允许我们加载更多的数据以填充页面,而不会一次性加载所有数据。当用户滚动到页面底部时,它会自动加载更多数据,实现页面的无限滚动效果。 Vue.js 实现无限滚动列表的基本原理 在 Vue.js 中,我们可以通过监听滚动…

    Vue 2023年5月28日
    00
  • vue组件实现移动端九宫格转盘抽奖

    实现移动端九宫格转盘抽奖的过程可以分为以下几步: 创建Vue组件:首先需要创建一个Vue组件来实现转盘抽奖功能。通过Vue组件,可以将转盘抽奖功能的代码模块化,并加入响应式处理、生命周期等Vue特性。 实现转盘转动效果:要让九宫格转盘能够转动,需要控制该组件中的转盘图片的旋转角度。可以通过CSS3动画或JavaScript来实现转盘旋转效果。 实现抽奖逻辑:…

    Vue 2023年5月29日
    00
  • 使用Webpack 搭建 Vue3 开发环境过程详解

    使用Webpack搭建Vue3开发环境的过程可以分为以下几个步骤: 1.安装Webpack和Vue3依赖 在开始使用Webpack搭建Vue3开发环境之前,我们需要先安装Webpack和Vue3的相关依赖。 Webpack是一个打包工具,可以将多个JavaScript、CSS、HTML等文件打包成一个或多个JavaScript文件。在搭建Vue3开发环境时,…

    Vue 2023年5月28日
    00
  • Vue中ref、reactive、toRef、toRefs、$refs的基本用法总结

    以下是Vue中ref、reactive、toRef、toRefs、$refs的完整攻略: 1. ref ref 可以将组件或DOM元素在父组件中进行标识。同时,也可以在父组件中使用 $refs 访问到子组件或DOM元素。使用ref的方式如下: <template> <div> <input type="text&quo…

    Vue 2023年5月28日
    00
  • Vue的computed计算属性你了解吗

    Vue的computed计算属性在Vue框架开发中非常常用。它可以根据计算函数里的数据自动计算出结果,并且在数据发生变化时会自动重新计算,然后用于渲染模板。在这篇文章中,我们将深入了解Vue的computed计算属性,掌握计算属性的使用方法和技巧。 什么是Vue的computed计算属性 Vue的computed计算属性是在Vue实例中定义的函数。它返回一个…

    Vue 2023年5月28日
    00
  • 解决vue.js not detected的问题

    当使用Vue.js框架开发web应用时,有时会出现Vue.js框架未被检测到的情况。这通常表现为网页空白,或者浏览器控制台输出“[Vue warn] You are using the runtime-only build of Vue where the template compiler is not available.” 这样的警告信息。本文将为大家…

    Vue 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部