前后端跨域的解决方案

news2024/9/21 4:39:31

在这里插入图片描述

对于使用Spring Boot和Vue的前后端分离项目,下面介绍四种常见的解决跨域问题的方式,并分别从Java后端的两种权限配置方法、前端代理、以及Nginx代理进行说明:

方案提供

  1. 使用Spring Boot的权限配置方法:

    • CorsFilter过滤器:在Spring Boot中可以通过自定义一个CorsFilter过滤器来配置跨域请求。在该过滤器中设置允许的请求源(Access-Control-Allow-Origin)、允许的请求方法(Access-Control-Allow-Methods)和允许的请求头部(Access-Control-Allow-Headers)等信息。
    • @CrossOrigin注解:在Spring Boot的Controller层的具体方法上添加@CrossOrigin注解,用于指定允许跨域请求的来源、方法和头部信息。
  2. 使用Spring Security的权限配置方法:

    • WebSecurityConfigurerAdapter配置:如果项目使用了Spring Security,可以通过继承WebSecurityConfigurerAdapter类并重写configure方法,调用cors方法来配置跨域访问的授权规则。
    • HttpSecurity配置:通过在HttpSecurity配置中添加.cors()方法启用跨域配置。
  3. 前端代理:
    在开发过程中,可以借助Webpack或者Vue CLI等构建工具提供的代理功能,在前端代码中进行相关配置,实现跨域代理。通过配置将接口请求转发到后端的具体地址和端口,使得前端请求不再被同源策略限制。

  4. Nginx代理:
    使用Nginx作为反向代理服务器,进行请求的转发和处理。通过配置Nginx的location指令,将特定URL的请求转发到后端接口所在的域名和端口,从而实现跨域请求。

以上四种方式都能有效解决Spring Boot和Vue跨域的问题,具体选择哪种方式取决于项目需求和实际情况。需要根据你的项目架构和运行环境,选择最适合的解决方案。

在使用Nginx代理时,请确保正确配置Nginx,并确保Nginx服务器正常运行。

请注意,为了确保安全性和可靠性,在使用任何一种解决方案时,务必仔细考虑并合理设置相应的安全。

实例演示

  1. 使用Spring Boot的CorsFilter过滤器配置跨域请求:
@Component
public class CorsFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        HttpServletResponse httpResponse = (HttpServletResponse) response;
        // 设置允许的请求源
        httpResponse.setHeader("Access-Control-Allow-Origin", "*");
        // 设置允许的请求方法
        httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
        // 设置允许的请求头部
        httpResponse.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");

        chain.doFilter(request, response);
    }
}
  1. 使用Spring Boot的@CrossOrigin注解配置跨域请求:
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "*", methods = { RequestMethod.GET, RequestMethod.POST })
public class ApiController {

    @GetMapping("/example")
    public String example() {
        return "Hello, Cross-Origin!";
    }
}
  1. 使用Spring Security的WebSecurityConfigurerAdapter配置跨域请求:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.cors(); // 启用跨域配置
        // 其他安全配置...
    }
}
  1. 使用Webpack或Vue CLI进行前端代理:
    在Vue项目的vue.config.js文件中进行代理配置,示例:
module.exports = {
  devServer: {
    proxy: {
      '^/api': {
        target: 'http://localhost:8080', // 后端接口地址
        ws: true,
        changeOrigin: true
      }
    }
  }
};
  1. 使用Nginx进行反向代理:
    在Nginx的配置文件中添加location指令,示例:
server {
  listen 80;
  server_name example.com;

  location /api {
    proxy_pass http://localhost:8080; // 后端接口地址
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
  }

  // 其他配置...
}

请根据您的项目需求和实际情况,参考以上示例代码思路进行具体的开发。如有疑问,请随时向我提问。

参考内容

对于关于代码的详细示例,请您参考以下资源:

  1. 使用Spring Boot解决跨域问题:
  • Spring官方文档:
  • https://spring.io/guides/gs/rest-service-cors/
  1. 使用Vue前端代理解决跨域问题:
  • Vue CLI官方文档:
  • https://cli.vuejs.org/config/#devserver-proxy
  1. 使用Nginx反向代理解决跨域问题:
  • Nginx官方文档:
  • http://nginx.org/en/docs/http/ngx_http_proxy_module.html

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

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

相关文章

ChatGPT 最佳实践指南之:提供参考文本

Provide reference text 提供参考文本 GPTs can confidently invent fake answers, especially when asked about esoteric topics or for citations and URLs. In the same way that a sheet of notes can help a student do better on a test, providing reference text to G…

图论之寻找桥边

目录 ①基准法 ②并查集 ③逆向思维之标记环边 ④并查集压缩路径 ①基准法 在图论中,一条边被称为“桥”代表这条边一旦被删除,这张图的连通块数量会增加。等价地说,一条边是一座桥当且仅当这条边不在任何环上。一张图可以有零或多座桥。…

FFmpeg5.0源码阅读—— av_read_frame

摘要:本文主要描述了FFmpeg中用于打开编解码器接口av_read_frame的具体调用流程,详细描述了该接口被调用时所作的具体工作。   关键字:ffmpeg、av_read_frame   读者须知:读者需要了解FFmpeg的基本使用流程,以及一…

JVM理论(二)类加载子系统

类加载流程 类加载流程 类加载器子系统负责从文件系统或者网络中加载class文件,class文件的文件头有特定的文件标识(CAFEBABE是JVM识别class文件是否合法的依据)classLoader只负责文件的加载,而执行引擎决定它是否被执行加载类的信息存放在运行时数据区的方法区中,方法区还包括…

【终端增强工具】这次,我把Terminal(终端)也接入ChatGPT了...

大家好,我是萌新程序员豆小匠。 为terminal(终端)增加自定义命令这个想法从开始学编程的时候就有了,但是一直没有付诸行动。 这次,终于抽时间完成了,且代码开源! 实现的功能 先说下实现的功能…

Idea社区版创建SpringBoot

一 下载Spring Initalizr and Assistant插件 选择左上角的File->Settings->Plugins,在搜索框中输入Spring,出现的第一个Spring Boot Helper插件,点击Installed,下载插件。(这里已经下载) 二 创建Spr…

Python学习笔记【01-基础语法】

文章目录 第一章输入输出print转义字符字符编码标识符和保留字变量数据类型整形浮点型布尔类型字符串类型数据类型转换 注释 第二章input()函数运算符算术运算符赋值运算符比较运算符布尔运算符(逻辑运算符)位运算符运算符的优先级 第三章顺序结构对象的布尔值单分支结构双分支…

dSYM文件是什么 ?

Overview 概述 dSYM的全称是debug symbol, 所以dSYM文件就是debug symbol (dSYM) file, dSYM文件中的每个 debug symbol, 对应了一个关系, 这个关系一端是源代码里真实的符号(类名称、全局变量以及方法和函数名称), 另一端则是其定义的文件号和行号. Apple Documentation 苹果…

word批量替换时使用通配符

替换这个好操作,打开替换功能: 弹出窗口中分别输入要替换的对象和替换的结果: 这里主要介绍特殊的替换: 可以看到点击“更多”之后,会出现下面的选项 像是【区分大小写】、【全字匹配】、【同音】、【查找单词的所有形…

三张表学会MySQL的单表操作!

表单一信息 1、查询表中所有学生的信息 mysql> select * from student; 2、 查询表中所有学生的姓名和英语成绩 mysql> select name,english from student; 3、过滤表中的重复数据 mysql> select DISTINCT * from student; 4、统计每个学生的总分 mysql> sele…

大语言模型高效训练基础知识:优化器AdamW和Adafator

Prerequsite:Adam优化算法 Adam优化算法很长一段时间都是比较主流的参数更新算法,也有很多变种,本文介绍在大模型训练过程中使用的AdamW和Adafator AdamW 原论文:Decoupled Weight Decay Regularization AdamW指的是Adam Weight Decay&#…

Mysql中默认自动事务autocommit关闭和开启方式、rollback回滚恢复数据的使用方法

文章目录 autocommit自动提交事物一、查看autocommit状态二、修改autocommit 状态的方式1、第一种方式2、修改mysql配置文件my.cnf 二、rollback回滚1、autocommit 开启1、autocommit 关闭 autocommit自动提交事物 MySQL 默认开启事务自动提交模式,每条 SOL 语句都…

深度神经网络知识蒸馏算法基础理论

知识蒸馏作为一种压缩方法,与剪枝、量化中直接在原模型上进行参数的剪枝或数据位宽的降低来压缩不同,知识蒸馏方法往往是通过将大模型上的精度转移到一个相对更小的模型上来完成对大模型的压缩。此处所说的大模型即知识蒸馏中的教师模型,而相…

【C语言】深入学习数组

👦个人主页:Weraphael ✍🏻作者简介:目前正在回炉重造C语言(2023暑假) ✈️专栏:【C语言航路】 🐋 希望大家多多支持,咱一起进步!😁 如果文章对你…

进程间通信方法——匿名管道

什么是管道&#xff1f; 管道是Unix中最古老的进程间通信的形式。我们把从一个进程连接到另一个进程的一个数据流称为一个“管道” 什么是匿名管道 就是一个没有名字的管道。 #include <unistd.h> 功能:创建一无名管道 原型 int pipe(int fd[2]); 参数 fd&#xff1a;文…

韩信谋反解密-使用命名空间

开机故事&#xff1a; 另一个韩信 什么是命名空间 c里面也有这种困扰&#xff0c;名字的冲突&#xff0c; 特意使用命名空间&#xff0c;开发的时候都要给函数命名 就会有名字相同的时候。这样就会出现混乱 区分相同名字相同函数的这样一个功能 用法1. #include<string…

openGauss学习笔记-04 openGauss极简版单机主备安装部署

文章目录 openGauss学习笔记-04 openGauss极简版单机主备安装部署4.1 获取安装包4.1.1 下载对应平台的安装包4.1.2 解压安装包4.1.3 查看目录结构 4.2 准备软硬件安装环境4.2.1 硬件环境要求4.2.2 软件环境要求4.2.3 软件依赖要求 4.3 单机主备安装部署4.3.1 安装前准备4.3.2 单…

【网络安全带你练爬虫-100练】第11练:xpath快速定位提取数据

目录 一、目标1&#xff1a;使用etree解析数据 二、目标2&#xff1a;使用xpath爬取指定数据 三、目标3&#xff1a;提取指定数据 四、网络安全小圈子 一、目标1&#xff1a;使用etree解析数据 其余的不用过多介绍&#xff0c;前面的练习都给大家已经过了一遍 def get_page…

【沐风老师】3DMAX砖石墙地面生成工具插件使用方法详解

3dMax砖石墙地面生成工具插件&#xff0c;收集了一些用于创建石墙、石头路面和不规则石头图案的实用工具&#xff0c;以模拟墙壁和地面。脚本会自动烘焙法线贴图、AO贴图和高度贴图以供实时使用。 【主要特点】 1.可以生成真实的石墙、地面、不规则石块及石灰墙面&#xff0c;是…

4.5 x64dbg 探索钩子劫持技术

钩子劫持技术是计算机编程中的一种技术&#xff0c;它们可以让开发者拦截系统函数或应用程序函数的调用&#xff0c;并在函数调用前或调用后执行自定义代码&#xff0c;钩子劫持技术通常用于病毒和恶意软件&#xff0c;也可以让开发者扩展或修改系统函数的功能&#xff0c;从而…