springboot跨域问题解决方案

下面是关于springboot跨域问题的解决方案完整攻略。

背景

在前后端分离的开发模式中,前端项目和后端项目通常会分别部署到不同的域名下,因此会出现跨域请求的问题。这时候就需要解决跨域问题。

解决方案

1. 添加跨域支持的Filter

Spring Boot提供了一种通过Filter来实现跨域请求的解决方案,步骤如下:

  1. 创建一个继承自OncePerRequestFilter的类,并重写其doFilterInternal方法。

```java
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter extends OncePerRequestFilter {

   @Override
   protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
       response.setHeader("Access-Control-Allow-Origin", "*"); // 允许跨域请求的域名
       response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE"); // 允许跨域请求的方法
       response.setHeader("Access-Control-Max-Age", "3600"); // 缓存时间(请求时间内不需要再次预请求)
       response.setHeader("Access-Control-Allow-Headers", "x-requested-with, Content-Type"); // request headers信息
       filterChain.doFilter(request, response);
   }

}
```

  1. src/main/resources/application.properties中添加如下配置:

properties
# CORS
cors.allowed-origins=*
cors.allowed-methods=POST, GET, OPTIONS, DELETE
cors.max-age=3600
cors.allowed-headers=x-requested-with, Content-Type

如果你使用的是yaml格式的配置文件,则配置如下:

yaml
# CORS
cors:
allowed-origins: "*"
allowed-methods: "POST, GET, OPTIONS, DELETE"
max-age: 3600
allowed-headers: "x-requested-with, Content-Type"

  1. 重启Spring Boot应用程序。

2. 使用Spring Boot自带的CORS支持

Spring Boot还支持使用注解的方式来实现跨域请求,步骤如下:

  1. 在Controller类或者方法上添加@CrossOrigin注解。

```java
@RestController
@RequestMapping("/user")
public class UserController {

   @CrossOrigin(origins = {"http://localhost:8080", "*"})
   @GetMapping("/list")
   public List<User> getUserList() {
       // ...
   }

}
```

@CrossOrigin注解有控制跨域请求的源origin,方法和请求头等参数的功能。

origins参数为必须参数,用于限制跨域请求的源,可以是字符串数组或者“*”,表示接受任何源。

  1. 重启Spring Boot应用程序。

示例

示例1:基于Filter的跨域请求解决方案

假设前端项目在http://localhost:8080,后端项目在http://localhost:8888,要使用JS的ajax方式请求后端数据,代码如下:

$.ajax({
    url: 'http://localhost:8888/api/user/list',
    method: 'GET',
    dataType: 'json',
    success: function(data) {
        // ...
    }
});

这时候就会出现跨域请求的问题。使用基于Filter的跨域请求解决方案,只需要按照上述步骤添加CorsFilter类和配置文件即可解决问题。

示例2:基于注解的跨域请求解决方案

在示例1的基础上,我们可以使用@CrossOrigin注解来解决跨域请求问题。代码如下:

@RestController
@RequestMapping("/api/user")
public class UserController {

    @CrossOrigin(origins = {"http://localhost:8080", "*"})
    @GetMapping("/list")
    public List<User> getUserList() {
        // ...
    }

}

这样就可以处理来自http://localhost:8080和任何其他源的跨域请求了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springboot跨域问题解决方案 - Python技术站

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

相关文章

  • vue2.0全局组件之pdf详解

    Vue 2.0全局组件之PDF详解 前言 本文将详细讲解Vue 2.0全局组件之PDF的使用方法和注意事项,并包含两个示例用于说明。如果您想将网站上的PDF文件以组件形式呈现,本文将为您提供详尽的攻略。 准备工作 在使用全局组件之前,您需要确保已经使用Vue CLI创建了项目,并安装了Vue。 vue create my-project 然后执行以下命令安装…

    Vue 2023年5月28日
    00
  • 浅谈Vue数据响应思路之数组

    浅谈Vue数据响应思路之数组 背景 在Vue中,为了能在数据改变时自动更新视图,采用了数据劫持和观察者模式相结合的方式进行响应式数据的实现。但是针对不同的数据类型,具体的实现方式会有所不同。本篇文章将深入浅出地讲解Vue数据响应思路之数组的实现原理。 数组数据响应的实现原理 Vue中对于数组的数据响应实现依赖于ES6中新增的Proxy方法以及definePr…

    Vue 2023年5月28日
    00
  • vscode 插件开发 + vue的操作方法

    Vscode 插件开发 + Vue 操作方法 在本文中,我们将介绍如何使用 VSCode 开发插件,并在插件中使用 Vue。 环境要求 在开始使用 Vue 进行开发之前,我们需要先安装好以下环境: Node.js Visual Studio Code Vue CLI 如果您的电脑上还没有这些环境,请先安装好它们。 创建一个 VSCode 插件项目 使用以下命…

    Vue 2023年5月28日
    00
  • vue插槽slot的简单理解与用法实例分析

    下面是“vue插槽slot的简单理解与用法实例分析”的攻略: 什么是插槽slot? 插槽slot是Vue.js中一个非常重要的概念,它是一种将内容分发到组件中的方式。在Vue.js中,组件是可以复用的,并且每个组件都可以有自己的样式和行为。但是,有时候我们需要在组件中引入其他组件或者HTML元素。这时候,就可以使用插槽slot了。插槽slot可以让我们将一个…

    Vue 2023年5月27日
    00
  • 基于Vue实现HTML转PDF并导出

    HTML转PDF并导出是一个非常实用的功能,该功能可以将HTML页面转换为PDF文件,并可以将PDF文件导出到本地磁盘或者远程服务器上,实现文档的方便共享和传播。 基于Vue实现HTML转PDF并导出的完整攻略如下: 1. 安装依赖库 首先,需要安装两个重要的依赖库:html2pdf和file-saver。html2pdf是将HTML转化为PDF的主要依赖库…

    Vue 2023年5月27日
    00
  • Vite使用Esbuild提升性能详解

    Vite使用Esbuild提升性能详解 背景 Vite是一个轻量级的前端工具,它的设计初衷是为了让开发者更快地启动和构建项目,提供了一些开箱即用的特性和优化,例如快速启动、模块热更新等。其中,Vite的关键特性之一就是使用了类似于Snowpack的“零配置”的模式进行快速的开发体验。 然而,在一些情况下,Vite的构建速度还是无法满足一些开发者的需求。因此,…

    Vue 2023年5月28日
    00
  • vue使用混入定义全局变量、函数、筛选器的实例代码

    Vue.js是一款非常强大的前端框架,允许用户自定义全局变量、函数和筛选器。Vue使用混入(Mixin)的方式定义全局变量、函数和筛选器。 什么是混入 混入是一种将组件中的一部分代码提取出来,然后将其应用到多个组件的技术。混入的特点是独立于组件的,而且可以在多个组件中复用。 Vue中混入的实现是利用Vue.mixin()方法。当使用Vue.mixin()方法…

    Vue 2023年5月28日
    00
  • vue使用better-scroll实现横向滚动的方法实例

    下面我来详细讲解“vue使用better-scroll实现横向滚动的方法实例”的完整攻略。 1. 安装better-scroll 在使用better-scroll之前,我们需要先安装它。可以使用npm或者yarn进行安装,命令如下: npm install better-scroll –save 或者 yarn add better-scroll 2. 实…

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