Spring Boot 跨域解决方案

ops/2024/11/1 6:31:35/

Spring Boot 跨域解决方案

引言

在 Web 应用中,跨域请求已经成为一个常见的问题。浏览器出于安全考虑,限制了不同源之间的请求,这种限制被称为同源策略。当我们的前端应用和后端 API 部署在不同的域名或端口下时,就会出现跨域问题。为了保证应用的正常运行,解决跨域问题显得尤为重要。本文将介绍两种常见的 Spring Boot 跨域解决方案:WebMvcConfigurerFilterRegistrationBean

常见的跨域产生条件:

  • 不同的协议:例如,前端使用 HTTPS,后端使用 HTTP。
  • 不同的域名:例如,前端在 example.com后端api.example.com
  • 不同的端口:例如,前端在 localhost:3000后端localhost:8080

1. 使用 WebMvcConfigurer 解决跨域

什么是 WebMvcConfigurer?

WebMvcConfigurer 是 Spring MVC 提供的一个接口,允许我们通过实现该接口来定制 Spring MVC 的配置。它提供了一系列钩子方法,便于我们进行全局配置。

实现跨域配置的步骤

下面是通过实现 WebMvcConfigurer 接口来配置跨域的示例代码:

java">@Configuration
public class SpringMvcConfiguration implements WebMvcConfigurer{@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowCredentials(true).allowedOrigins("*").allowedHeaders("*").allowedMethods("*").maxAge(1800L);}}

注意事项

  • allowedOrigins:可以指定允许的来源,可以是特定的域名。
  • allowedMethods:指定允许的 HTTP 方法,需根据实际需求配置。
  • allowedHeaders:指定允许的请求头,使用 "*" 表示允许所有请求头,具体可以根据需求进行限制。
  • allowCredentials:是否允许携带凭据(如 Cookies)。

2. 使用 FilterRegistrationBean 解决跨域

什么是 FilterRegistrationBean?

FilterRegistrationBean 是 Spring Boot 提供的用于注册过滤器的工具。通过注册自定义的过滤器,我们可以灵活地处理请求和响应,包括设置跨域相关的响应头。

实现跨域配置的步骤

以下是通过 FilterRegistrationBean 实现跨域配置的示例代码:

java">@Configuration
public class CorsConfig {@Beanpublic FilterRegistrationBean<CorsFilter> corsFilterBean() {CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.setAllowCredentials(true);corsConfiguration.addAllowedOrigin("*");corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.setMaxAge(1800L);UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", corsConfiguration);FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));bean.setOrder(Integer.MIN_VALUE);return bean;}}

结论

本文介绍了两种在 Spring Boot 中处理跨域请求的方法:使用 WebMvcConfigurerFilterRegistrationBeanWebMvcConfigurer 方法相对简单,适合大多数场景;而 FilterRegistrationBean 方法提供了更大的灵活性,适合需要定制化处理的场景。


http://www.ppmy.cn/ops/130062.html

相关文章

ELK实现加载多个配置日志文件

服务器准备3台133为ELS存储服务器&#xff0c;135为Kibana前台显示收集服务器&#xff0c;136为logstash客户端 打开136logstash配置pipelines.yml文件path.config:配置模块 打开136的logstash.yml配置文件 在136服务器上查看logstash配置文件 需要将mysql_log.conf和nginx_log…

学会定制化 Go 项目的 error,回溯错误的原因和发生位置

‍Go语言的Error处理一直被人吐槽&#xff0c;吐槽的点除了一个接一个的 if err &#xff01; nil 的判断外&#xff0c;还有人说Go的错误太原始不能像其他语言那样在抛出异常的时候的时候传一个Casue Exception 把导致异常的整个原因链串起来。 第一点确实是事实&#xff0c;但…

机器学习算法工程师笔试选择题(1)

1. 关于梯度下降的说法正确的是: A. 梯度下降法可以确保找到全局最优解。B. 随机梯度下降每次使用所有数据来更新参数。C. 批量梯度下降(Batch Gradient Descent)通常收敛更快。D. 学习率过大会导致梯度下降过程震荡。答案:D(学习率过大会导致不稳定,可能震荡或无法收敛)…

linux学习笔记 Ubuntu下的守护进程supervisor安装与多项目部署

我这里首先是在本地WSL上进行安装&#xff0c;WSL2的是ubuntu 24.04&#xff0c;之后又再正式环境的ubuntu 20.04上安装&#xff0c;再次记录一下。 1、首先安装supervisor apt install -y supervisor 2、创建配置文件 echo_supervisord_conf > /etc/supervisor/supervisor…

【http协议笔记】-- 浏览器简单分析get、post请求

环境&#xff1a;为了了解http协议的交互方式&#xff0c;使用edge浏览器简单分析协议内容&#xff0c;给刚入门的小伙伴分享一下&#xff0c;方便大家学习。 以菜鸟教程的网站为例子&#xff1a; 分析post&#xff1a; 请求url&#xff1a; 请求参数&#xff1a; 请求相应&a…

Oracle视频基础1.3.3练习

1.3.3 检查数据库启动情况 ps -ef | grep oracle启动数据库 sqlplus /nolog conn / as sysdba修改 fast_start_mttr_target 参数为初始值-50&#xff0c;缺省 scope 和 sid&#xff0c;查看修改结果 show parameter fast; alter system set parameter 250; show parameter fa…

讲一讲 kafka 的 ack 的三种机制?

大家好&#xff0c;我是锋哥。今天分享关于【K讲一讲 kafka 的 ack 的三种机制&#xff1f;】面试题&#xff1f;希望对大家有帮助&#xff1b; 讲一讲 kafka 的 ack 的三种机制&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Kafka的消息确认机制&…

【jvm】新生代和老年代

目录 1. 说明2. 新生代&#xff08;Young Generation&#xff09;2.1 定义与用途2.2 内存分配与回收2.3 特点 3. 老年代&#xff08;Old Generation&#xff09;3.1 定义与用途3.2 内存分配与回收3.3 特点 1. 说明 1.在Java虚拟机&#xff08;JVM&#xff09;中&#xff0c;新…